From d925ca19bbb7b120080dc1b97ddedcf5b396b852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Tue, 16 Mar 2021 14:37:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HttpServer/Events/OnRequest.php | 33 +++++++++++++++++---------------- HttpServer/Http/Request.php | 12 ++++++++++++ System/Event.php | 15 ++++++++------- function.php | 4 ++-- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/HttpServer/Events/OnRequest.php b/HttpServer/Events/OnRequest.php index 2ad2adcb..64260eed 100644 --- a/HttpServer/Events/OnRequest.php +++ b/HttpServer/Events/OnRequest.php @@ -56,23 +56,20 @@ class OnRequest extends Callback public function onHandler(Request $request, Response $response): mixed { try { - $this->event->trigger(self::BEFORE_REQUEST, [$request]); + /** @var HRequest $request */ + [$request, $response] = OnRequest::createContext($request, $response); - [$request, $response] = static::create($request, $response); - if (!$request->is('favicon.ico')) { - return \router()->dispatch(); - } + $this->event->dispatch(self::BEFORE_REQUEST, [$request]); - return \send(null); + $result = $request->dispatch(); + + $this->event->dispatch(self::AFTER_REQUEST, [$request, $result]); + + return $result; } catch (ExitException | Error | \Throwable $exception) { - if ($exception instanceof ExitException) { - return \send(Json::to($exception->getCode(), $exception->getMessage())); - } return $this->sendErrorMessage($request, $response, $exception); } finally { $this->event->trigger(Event::SYSTEM_RESOURCE_RELEASES); - $this->event->trigger(self::AFTER_REQUEST, [$request]); - $this->logger->insert(); } } @@ -85,7 +82,7 @@ class OnRequest extends Callback * @throws NotFindClassException * @throws ReflectionException */ - public static function create($request, $response): array + public static function createContext($request, $response): array { return [HRequest::create($request), HResponse::create($response)]; } @@ -96,13 +93,13 @@ class OnRequest extends Callback * @param $sResponse * @param $exception * @return bool|string - * @throws ComponentException * @throws Exception */ protected function sendErrorMessage($sRequest, $sResponse, $exception): bool|string { - $this->error($exception); - $params = Snowflake::app()->getLogger()->exception($exception); + $this->error($exception->getMessage()); + $this->event->dispatch(self::AFTER_REQUEST, [$sRequest, $exception]); + if ($sResponse instanceof Response) { [$sRequest, $sResponse] = [HRequest::create($sRequest), HResponse::create($sResponse)]; } @@ -111,7 +108,11 @@ class OnRequest extends Callback $sResponse->addHeader('Access-Control-Allow-Headers', $sRequest->headers->get('access-control-request-headers')); $sResponse->addHeader('Access-Control-Request-Method', $sRequest->headers->get('access-control-request-method')); - return $sResponse->send($params, 200); + if (!($exception instanceof ExitException)) { + return $sResponse->send(\logger()->exception($exception), 200); + } else { + return $sResponse->send($exception->getMessage(), 200); + } } } diff --git a/HttpServer/Http/Request.php b/HttpServer/Http/Request.php index 4cc56336..2591b81f 100644 --- a/HttpServer/Http/Request.php +++ b/HttpServer/Http/Request.php @@ -8,6 +8,7 @@ use Exception; use HttpServer\Abstracts\HttpService; use HttpServer\IInterface\AuthIdentity; +use HttpServer\Route\Router; use JetBrains\PhpStorm\Pure; use ReflectionException; use Snowflake\Core\ArrayAccess; @@ -15,6 +16,7 @@ use Snowflake\Core\Json; use Snowflake\Exception\ComponentException; use Snowflake\Exception\NotFindClassException; use Snowflake\Snowflake; +use stdClass; use Swoole\Server; use function router; @@ -437,6 +439,16 @@ class Request extends HttpService } + /** + * @return mixed + * @throws Exception + */ + public function dispatch(): mixed + { + return $this->is('favicon.ico') ? \send(null) : \router(); + } + + /** * @param $request * @return mixed diff --git a/System/Event.php b/System/Event.php index 401eef81..acf335ef 100644 --- a/System/Event.php +++ b/System/Event.php @@ -177,12 +177,13 @@ class Event extends BaseObject } - /** - * @param $name - * @param array $params - * @param null $scope - * @return bool - */ + /** + * @param $name + * @param array $params + * @param null $scope + * @return bool + * @throws Exception + */ public function dispatch($name, $params = [], $scope = null): bool { return $this->trigger($name, $params, $scope); @@ -219,7 +220,7 @@ class Event extends BaseObject * @return bool * @throws Exception */ - private function execute($event, $parameter) + private function execute($event, $parameter): bool { try { $meta = $this->mergeParams($event[1], $parameter); diff --git a/function.php b/function.php index ebc0cc0d..bf09a945 100644 --- a/function.php +++ b/function.php @@ -592,10 +592,10 @@ if (!function_exists('send')) { /** * @param $context * @param $statusCode - * @return bool|Response|stdClass|string + * @return mixed * @throws Exception */ - function send($context, $statusCode = 404): Response|bool|string|stdClass + function send($context, $statusCode = 404): mixed { return \response()->send($context, $statusCode); }