From f38942f4f3018e7912977cf3799d1d3e87c773db Mon Sep 17 00:00:00 2001 From: whwyy Date: Mon, 16 Dec 2024 16:36:35 +0800 Subject: [PATCH] eee --- src/Router.php | 368 +++++++++++++------------- src/Validator/ValidatorMiddleware.php | 13 +- 2 files changed, 197 insertions(+), 184 deletions(-) diff --git a/src/Router.php b/src/Router.php index 585c7fc..c9738b2 100644 --- a/src/Router.php +++ b/src/Router.php @@ -12,6 +12,7 @@ use Kiri\Router\Validator\ValidatorMiddleware; use Kiri\Router\Base\Middleware as MiddlewareManager; use Kiri\Router\Constrict\RequestMethod; use Psr\Container\ContainerInterface; +use Psr\Http\Message\ResponseInterface; /** * @@ -26,219 +27,230 @@ class Router { - const array METHODS = [RequestMethod::REQUEST_POST, RequestMethod::REQUEST_GET, RequestMethod::REQUEST_OPTIONS, RequestMethod::REQUEST_DELETE, RequestMethod::REQUEST_PUT, RequestMethod::REQUEST_HEAD]; + const array METHODS = [RequestMethod::REQUEST_POST, RequestMethod::REQUEST_GET, RequestMethod::REQUEST_OPTIONS, RequestMethod::REQUEST_DELETE, RequestMethod::REQUEST_PUT, RequestMethod::REQUEST_HEAD]; - /** - * @var string - */ - private static string $type = ROUTER_TYPE_HTTP; + /** + * @var string + */ + private static string $type = ROUTER_TYPE_HTTP; - /** - * @param string $name - * @param Closure $closure - */ - public static function addServer(string $name, Closure $closure): void - { - static::$type = $name; - $closure(); - static::$type = ROUTER_TYPE_HTTP; - } + /** + * @param string $name + * @param Closure $closure + */ + public static function addServer(string $name, Closure $closure): void + { + static::$type = $name; + $closure(); + static::$type = ROUTER_TYPE_HTTP; + } - /** - * @param Closure $handler - */ - public static function jsonp(Closure $handler): void - { - static::$type = 'json-rpc'; - $handler(); - static::$type = ROUTER_TYPE_HTTP; - } + /** + * @param Closure $handler + */ + public static function jsonp(Closure $handler): void + { + static::$type = 'json-rpc'; + $handler(); + static::$type = ROUTER_TYPE_HTTP; + } - /** - * @param string $route - * @param string $handler - * @throws - */ - public static function post(string $route, string $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->addRoute([RequestMethod::REQUEST_POST], $route, $handler); - } + /** + * @param string $route + * @param string $handler + * + * @throws + */ + public static function post(string $route, string $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + $router->addRoute([RequestMethod::REQUEST_POST], $route, $handler); + } - /** - * @param string $route - * @param string $handler - * @throws - */ - public static function get(string $route, string $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->addRoute([RequestMethod::REQUEST_GET], $route, $handler); - } + /** + * @param string $route + * @param string $handler + * + * @throws + */ + public static function get(string $route, string $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + $router->addRoute([RequestMethod::REQUEST_GET], $route, $handler); + } - /** - * @param string $route - * @param string $handler - * @throws - */ - public static function options(string $route, string $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->addRoute([RequestMethod::REQUEST_OPTIONS], $route, $handler); - } + /** + * @param string $route + * @param string $handler + * + * @throws + */ + public static function options(string $route, string $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + $router->addRoute([RequestMethod::REQUEST_OPTIONS], $route, $handler); + } - /** - * @param string $route - * @param string $handler - * @throws - */ - public static function any(string $route, string $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->addRoute(self::METHODS, $route, $handler); - } + /** + * @param string $route + * @param string $handler + * + * @throws + */ + public static function any(string $route, string $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + $router->addRoute(self::METHODS, $route, $handler); + } - /** - * @param string $route - * @param string $handler - * @throws - */ - public static function delete(string $route, string $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->addRoute([RequestMethod::REQUEST_DELETE], $route, $handler); - } + /** + * @param string $route + * @param string $handler + * + * @throws + */ + public static function delete(string $route, string $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + $router->addRoute([RequestMethod::REQUEST_DELETE], $route, $handler); + } - /** - * @param string $route - * @param string $handler - * @throws - */ - public static function head(string $route, string $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->addRoute([RequestMethod::REQUEST_HEAD], $route, $handler); - } + /** + * @param string $route + * @param string $handler + * + * @throws + */ + public static function head(string $route, string $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + $router->addRoute([RequestMethod::REQUEST_HEAD], $route, $handler); + } - /** - * @param string $route - * @param string $handler - * @throws - */ - public static function put(string $route, string $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->addRoute([RequestMethod::REQUEST_PUT], $route, $handler); - } + /** + * @param string $route + * @param string $handler + * + * @throws + */ + public static function put(string $route, string $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + $router->addRoute([RequestMethod::REQUEST_PUT], $route, $handler); + } - /** - * @param array|RequestMethod $methods - * @param string $route - * @param string|array $handler - */ - public static function addRoute(array|RequestMethod $methods, string $route, string|array $handler): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - if ($methods instanceof RequestMethod) { - $methods = [$methods]; - } - $router->addRoute($methods, $route, $handler); - } + /** + * @param array|RequestMethod $methods + * @param string $route + * @param string|array $handler + */ + public static function addRoute(array|RequestMethod $methods, string $route, string|array $handler): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + if ($methods instanceof RequestMethod) { + $methods = [$methods]; + } + $router->addRoute($methods, $route, $handler); + } - /** - * @param array $config - * @param Closure $closure - * @throws - */ - public static function group(array $config, Closure $closure): void - { - $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); + /** + * @param array $config + * @param Closure $closure + * + * @throws + */ + public static function group(array $config, Closure $closure): void + { + $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); - $router->groupTack[] = $config; + $router->groupTack[] = $config; - call_user_func($closure); + call_user_func($closure); - array_pop($router->groupTack); - } + array_pop($router->groupTack); + } - /** - * @throws - */ - public function scan_build_route(): void - { - $coordinator = CoordinatorManager::utility(Coordinator::WORKER_START); + /** + * @throws + */ + public function scan_build_route(): void + { + $coordinator = CoordinatorManager::utility(Coordinator::WORKER_START); - $this->read_dir_file(APP_PATH . 'routes'); + $this->read_dir_file(APP_PATH . 'routes'); - $container = Kiri::getDi(); - $scanner = $container->get(Kiri\Di\Scanner::class); - $scanner->load_directory(APP_PATH . 'app/Controller'); - $this->reset($container); + $container = Kiri::getDi(); + $scanner = $container->get(Kiri\Di\Scanner::class); + $scanner->load_directory(APP_PATH . 'app/Controller'); + $this->reset($container); - $coordinator->done(); - } + $coordinator->done(); + } - /** - * @param ContainerInterface $container - * @return void - * @throws - */ - public function reset(ContainerInterface $container): void - { - $router = $container->get(DataGrip::class)->get(static::$type); - foreach ($router->getMethods() as $name => $method) { - $middlewares = MiddlewareManager::get($method->getClass(), $method->getMethod()); - $validator = MiddlewareManager::getValidator($method->getClass(), $method->getMethod()); - if (!is_null($validator)) { - array_unshift($middlewares, new ValidatorMiddleware($method->getClass(), $method->getMethod())); - } - $router->setHttpHandler($name, new HttpRequestHandler($middlewares, $method)); - } - } + /** + * @param ContainerInterface $container + * + * @return void + * @throws + */ + public function reset(ContainerInterface $container): void + { + $router = $container->get(DataGrip::class)->get(static::$type); + foreach ($router->getMethods() as $name => $method) { + $middlewares = MiddlewareManager::get($method->getClass(), $method->getMethod()); + $validator = MiddlewareManager::getValidator($method->getClass(), $method->getMethod()); + if (!is_null($validator)) { + array_unshift($middlewares, new ValidatorMiddleware(di(ResponseInterface::class), $method->getClass(), $method->getMethod())); + } + $router->setHttpHandler($name, new HttpRequestHandler($middlewares, $method)); + } + } - /** - * @param $path - * @return void - * @throws - */ - private function read_dir_file($path): void - { - $files = glob($path . '/*'); - for ($i = 0; $i < count($files); $i++) { - $file = $files[$i]; - if (is_dir($file)) { - $this->read_dir_file($file); - } else { - $this->resolve_file($file); - } - } - } + /** + * @param $path + * + * @return void + * @throws + */ + private function read_dir_file($path): void + { + $files = glob($path . '/*'); + for ($i = 0; $i < count($files); $i++) { + $file = $files[$i]; + if (is_dir($file)) { + $this->read_dir_file($file); + } else { + $this->resolve_file($file); + } + } + } - /** - * @param $files - * @throws - */ - private function resolve_file($files): void - { - try { - include "$files"; - } catch (\Throwable $throwable) { - error($throwable); - } - } + /** + * @param $files + * + * @throws + */ + private function resolve_file($files): void + { + try { + include "$files"; + } catch (\Throwable $throwable) { + error($throwable); + } + } } diff --git a/src/Validator/ValidatorMiddleware.php b/src/Validator/ValidatorMiddleware.php index 304924d..848ef44 100644 --- a/src/Validator/ValidatorMiddleware.php +++ b/src/Validator/ValidatorMiddleware.php @@ -17,11 +17,12 @@ class ValidatorMiddleware implements MiddlewareInterface { - /** - * @param string $class - * @param string $method - */ - public function __construct(public string $class, public string $method) + /** + * @param ResponseInterface $response + * @param string $class + * @param string $method + */ + public function __construct(public ResponseInterface $response ,public string $class, public string $method) { } @@ -38,7 +39,7 @@ class ValidatorMiddleware implements MiddlewareInterface if (!$validator->run($request)) { Kiri::getLogger()->println($request->getUri()->getPath() . ' `' . $validator->error() . '`'); - return di(ResponseInterface::class)->html($validator->error(), 415); + return $this->response->html($validator->error(), 415); } else { return $handler->handle($request); }