diff --git a/src/Handler.php b/src/Handler.php index d71baa7..16dc67f 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -4,9 +4,6 @@ declare(strict_types=1); namespace Kiri\Router; use Closure; -use Kiri\Di\Context; -use Kiri\Router\Base\Controller; -use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; diff --git a/src/Router.php b/src/Router.php index 1cb61cb..adfc212 100644 --- a/src/Router.php +++ b/src/Router.php @@ -6,6 +6,7 @@ namespace Kiri\Router; use Closure; use Exception; use Kiri; +use Kiri\Router\Base\Middleware as MiddlewareManager; use Kiri\Router\Constrict\RequestMethod; use ReflectionException; @@ -178,7 +179,10 @@ class Router $scanner->parse('App'); $this->read_dir_file(APP_PATH . 'routes'); - } + + $router = Kiri::getDi()->get(DataGrip::class)->get(ROUTER_TYPE_HTTP); + $router->reset(); + } /** diff --git a/src/RouterCollector.php b/src/RouterCollector.php index 01bf0af..199a830 100644 --- a/src/RouterCollector.php +++ b/src/RouterCollector.php @@ -8,6 +8,7 @@ namespace Kiri\Router; use Closure; use Exception; use Kiri; +use Kiri\Router\Base\Middleware as MiddlewareManager; use Kiri\Router\Base\NotFoundController; use Kiri\Router\Constrict\RequestMethod; use ReflectionException; @@ -34,7 +35,7 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate /** - * @var HashMap + * @var array> */ private HashMap $methods; @@ -49,6 +50,30 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate } + /** + * @return void + * @throws ReflectionException + */ + public function reset(): void + { + $middlewareManager = \Kiri::getDi()->get(MiddlewareManager::class); + + /** + * @var string $method + * @var HashMap $handlers + */ + foreach ($this->methods as $handlers) { + + /** @var Handler $handler */ + foreach ($handlers as $path => $handler) { + $middleware = $middlewareManager->get($handler->getClass(), $handler->getMethod()); + + $handlers->put($path, new HttpRequestHandler($middleware, $handler)); + } + } + } + + /** * @return array */ @@ -200,11 +225,11 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate * @return Handler|null * @throws ReflectionException */ - public function query(string $path, string $method): ?Handler + public function query(string $path, string $method): ?HttpRequestHandler { $parent = $this->methods->get($method); if ($parent === null) { - return new Handler([di(NotFoundController::class), 'fail'], []); + return new HttpRequestHandler([], new Handler([di(NotFoundController::class), 'fail'], [])); } if ($method === 'OPTIONS') { $path = '/*';