diff --git a/HttpServer/Events/OnRequest.php b/HttpServer/Events/OnRequest.php index d361bb28..ec348151 100644 --- a/HttpServer/Events/OnRequest.php +++ b/HttpServer/Events/OnRequest.php @@ -39,17 +39,18 @@ class OnRequest extends Callback /** @var HRequest $sRequest */ [$sRequest, $sResponse] = static::setContext($request, $response); if ($sRequest->is('favicon.ico')) { - return $sResponse->send($sRequest->isNotFound(), 200); + $params = $sResponse->send($sRequest->isNotFound(), 200); + } else { + $params = Snowflake::app()->getRouter()->dispatch(); } - return Snowflake::app()->getRouter()->dispatch(); } catch (Error | \Throwable $exception) { - $this->sendErrorMessage($sResponse ?? null, $exception, $response); + $params = $this->sendErrorMessage($sResponse ?? null, $exception, $response); } finally { $events = Snowflake::app()->getEvent(); if (!$events->exists(Event::EVENT_AFTER_REQUEST)) { return; } - $events->trigger(Event::EVENT_AFTER_REQUEST, [$request]); + $events->trigger(Event::EVENT_AFTER_REQUEST, [$sRequest, $params]); } } @@ -58,16 +59,17 @@ class OnRequest extends Callback * @param $sResponse * @param $exception * @param $response + * @return false|int|mixed|string * @throws Exception */ protected function sendErrorMessage($sResponse, $exception, $response) { + $params = $this->format($exception); if (empty($sResponse)) { - $response->status(200); - $response->end($exception->getMessage()); - } else { - $sResponse->send($this->format($exception), 200); + $sResponse = \response(); + $sResponse->response = $response; } + return $sResponse->send($params, 200); } diff --git a/HttpServer/Http/Response.php b/HttpServer/Http/Response.php index f10c7aa9..7269131c 100644 --- a/HttpServer/Http/Response.php +++ b/HttpServer/Http/Response.php @@ -156,7 +156,7 @@ class Response extends Application $event = Snowflake::app()->event; $event->trigger('CONSOLE_END'); - return 'ok'; + return $result; } /** @@ -171,7 +171,8 @@ class Response extends Application $response->header('Content-Type', $this->getContentType()); $response->header('Access-Control-Allow-Origin', '*'); $response->header('Run-Time', $this->getRuntime()); - return $response->end($sendData); + $response->end($sendData); + return $sendData; } /** diff --git a/HttpServer/Route/Node.php b/HttpServer/Route/Node.php index 0d02af79..57a1b4c9 100644 --- a/HttpServer/Route/Node.php +++ b/HttpServer/Route/Node.php @@ -10,6 +10,7 @@ use Exception; use HttpServer\Application; use HttpServer\Route\Annotation\Annotation; use Snowflake\Core\JSON; +use Snowflake\Event; use Snowflake\Snowflake; /** @@ -85,26 +86,6 @@ class Node extends Application } - /** - * @return bool - */ - public function hasAfter() - { - return count($this->_after) > 0; - } - - - /** - * @param $response - * @return mixed|null - */ - public function afterDispatch($response) - { - $callback = Reduce::after($this->_after); - return $callback(\request(), $response); - } - - /** * @return array */ @@ -114,15 +95,6 @@ class Node extends Application } - /** - * @return array - */ - public function getAfters() - { - return $this->_after; - } - - /** * @return array */ @@ -230,7 +202,11 @@ class Node extends Application */ public function addAfter($handler) { - $this->_after[] = $handler; + $event = Snowflake::app()->getEvent(); + if ($event->exists(Event::EVENT_AFTER_REQUEST, $handler)) { + return; + } + $event->on(Event::EVENT_AFTER_REQUEST, $handler); } diff --git a/HttpServer/Route/Router.php b/HttpServer/Route/Router.php index 9bf47f48..3d93e638 100644 --- a/HttpServer/Route/Router.php +++ b/HttpServer/Route/Router.php @@ -419,27 +419,9 @@ class Router extends Application implements RouterInterface { $request = Context::getContext('request'); if (!($node = $this->find_path($request))) { - $response = JSON::to(404, self::NOT_FOUND); - response()->send($response, 200); - } else { - response()->send($response = $node->dispatch(), 200); + return JSON::to(404, self::NOT_FOUND); } - $this->onAfter($response, $node); - } - - - /** - * @param $data - * @param null|Node $node - */ - private function onAfter($data, $node = null) - { - Coroutine::defer(function () use ($node, $data) { - if (!$node->hasAfter()) { - return; - } - $node->afterDispatch($data); - }); + return $node->dispatch(); }