From 2beaa726cdef8b50d8640b3094b82fa2fcbc8408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Tue, 27 Jul 2021 18:32:24 +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/Route/Router.php | 31 +++++++++++++++++-------------- Server/HTTPServerListener.php | 17 ++++++++--------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/HttpServer/Route/Router.php b/HttpServer/Route/Router.php index 624a7604..bac671d5 100644 --- a/HttpServer/Route/Router.php +++ b/HttpServer/Route/Router.php @@ -36,7 +36,7 @@ class Router extends HttpService implements RouterInterface const NOT_FOUND = 'Page not found or method not allowed.'; /** @var string[] */ - public array $methods = ['get', 'post', 'options', 'put', 'delete', 'receive', 'head']; + public array $methods = ['GET', 'POST', 'OPTIONS', 'PUT', 'DELETE', 'RECEIVE', 'HEAD']; public ?Closure $middleware = null; @@ -232,7 +232,7 @@ class Router extends HttpService implements RouterInterface */ public function post($route, $handler): ?Node { - return $this->addRoute($route, $handler, 'post'); + return $this->addRoute($route, $handler, 'POST'); } /** @@ -243,7 +243,7 @@ class Router extends HttpService implements RouterInterface */ public function get($route, $handler): ?Node { - return $this->addRoute($route, $handler, 'get'); + return $this->addRoute($route, $handler, 'GET'); } @@ -267,7 +267,7 @@ class Router extends HttpService implements RouterInterface */ public function options($route, $handler): ?Node { - return $this->addRoute($route, $handler, 'options'); + return $this->addRoute($route, $handler, 'OPTIONS'); } @@ -280,7 +280,7 @@ class Router extends HttpService implements RouterInterface public function any($route, $handler): Any { $nodes = []; - foreach (['get', 'post', 'options', 'put', 'delete', 'head'] as $method) { + foreach (['GET', 'POST', 'OPTIONS', 'PUT', 'DELETE', 'HEAD'] as $method) { $nodes[] = $this->addRoute($route, $handler, $method); } return new Any($nodes); @@ -294,7 +294,7 @@ class Router extends HttpService implements RouterInterface */ public function delete($route, $handler): ?Node { - return $this->addRoute($route, $handler, 'delete'); + return $this->addRoute($route, $handler, 'DELETE'); } @@ -306,7 +306,7 @@ class Router extends HttpService implements RouterInterface */ public function head($route, $handler): ?Node { - return $this->addRoute($route, $handler, 'head'); + return $this->addRoute($route, $handler, 'HEAD'); } @@ -318,7 +318,7 @@ class Router extends HttpService implements RouterInterface */ public function put($route, $handler): ?Node { - return $this->addRoute($route, $handler, 'put'); + return $this->addRoute($route, $handler, 'PUT'); } /** @@ -328,7 +328,7 @@ class Router extends HttpService implements RouterInterface * @return Node * @throws */ - public function NodeInstance($value, int $index = 0, string $method = 'get'): Node + public function NodeInstance($value, int $index = 0, string $method = 'GET'): Node { $node = new Node(); $node->childes = []; @@ -400,7 +400,7 @@ class Router extends HttpService implements RouterInterface private function loadNamespace($method): array { $name = array_column($this->groupTacks, 'namespace'); - if ($method == 'package' || $method == 'receive') { + if ($method == 'package' || $method == 'RECEIVE') { $dir = 'App\\Listener'; } else { $dir = $this->dir; @@ -515,9 +515,9 @@ class Router extends HttpService implements RouterInterface * @return mixed * @throws */ - public function dispatch(): void + public function dispatch(Request $request): void { - $node = $this->find_path(\request()); + $node = $this->find_path($request); if (!($node instanceof Node)) { $this->response->setFormat(Response::HTML); $this->response->send('

404

'); @@ -527,7 +527,10 @@ class Router extends HttpService implements RouterInterface } - public function status404() + /** + * @throws Exception + */ + public function pageNotFound() { $this->response->setFormat(Response::HTML); $this->response->send('

404

'); @@ -539,7 +542,7 @@ class Router extends HttpService implements RouterInterface * @return mixed * @throws Exception */ - private function exception($exception): mixed + public function exception($exception): mixed { return Snowflake::app()->getLogger()->exception($exception); } diff --git a/Server/HTTPServerListener.php b/Server/HTTPServerListener.php index 18a80556..1add3cc2 100644 --- a/Server/HTTPServerListener.php +++ b/Server/HTTPServerListener.php @@ -103,16 +103,15 @@ class HTTPServerListener extends Abstracts\Server try { // defer(fn() => fire(Event::SYSTEM_RESOURCE_RELEASES)); [$sRequest, $sResponse] = $this->request($request, $response); - $node = $this->router->find_path($sRequest); - if ($node instanceof Node) { - $sResponse->send($node->dispatch()); - } else { - $sResponse->send('404', 404); - } + + $result = $this->router->dispatch($sRequest); } catch (Error | Throwable $exception) { - $response->setHeader('Content-Type', 'text/html; charset=utf-8'); - $response->setStatusCode(500); - $response->end(jTraceEx($exception, null, true)); + $result = $this->router->exception($exception); + } finally { + if (!isset($sResponse)){ + return; + } + $sResponse->send($result); } }