diff --git a/src/Base/AbstractHandler.php b/src/Base/AbstractHandler.php index 5ed8c3f..ea270bd 100644 --- a/src/Base/AbstractHandler.php +++ b/src/Base/AbstractHandler.php @@ -7,39 +7,39 @@ use Kiri\Router\Handler; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; +use ReflectionException; abstract class AbstractHandler { - public int $offset = 0; + public int $offset = 0; - /** - * @param array $middlewares - * @param Handler $handler - */ - public function __construct(public array $middlewares, public Handler $handler) - { - } + /** + * @param array $middlewares + * @param Handler $handler + */ + public function __construct(public array $middlewares, public Handler $handler) + { + } + /** + * @param ServerRequestInterface $request + * @return ResponseInterface + * @throws ReflectionException + */ + public function execute(ServerRequestInterface $request): ResponseInterface + { + if (!isset($this->middlewares[$this->offset])) { + return $this->handler->handle($request); + } - /** - * @param ServerRequestInterface $request - * @return ResponseInterface - * @throws \ReflectionException - */ - public function execute(ServerRequestInterface $request): ResponseInterface - { - if (!isset($this->middlewares[$this->offset])) { - return $this->handler->handle($request); - } + /** @var MiddlewareInterface $middleware */ + $middleware = di($this->middlewares[$this->offset]); + $this->offset += 1; - /** @var MiddlewareInterface $middleware */ - $middleware = di($this->middlewares[$this->offset]); - $this->offset += 1; - - return $middleware->process($request, $this); - } + return $middleware->process($request, $this); + } } diff --git a/src/HttpRequestHandler.php b/src/HttpRequestHandler.php index 8caa6cc..70a3040 100644 --- a/src/HttpRequestHandler.php +++ b/src/HttpRequestHandler.php @@ -13,16 +13,27 @@ class HttpRequestHandler extends AbstractHandler implements RequestHandlerInterf { - /** - * @param ServerRequestInterface $request - * @return ResponseInterface - * @throws ReflectionException - */ - public function handle(ServerRequestInterface $request): ResponseInterface - { - // TODO: Implement handle() method. - return $this->execute($request); - } + /** + * @param ServerRequestInterface $request + * @return ResponseInterface + * @throws ReflectionException + */ + public function run(ServerRequestInterface $request): ResponseInterface + { + $this->offset = 0; + return $this->handle($request); + } + + /** + * @param ServerRequestInterface $request + * @return ResponseInterface + * @throws ReflectionException + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + // TODO: Implement handle() method. + return $this->execute($request); + } } diff --git a/src/Router.php b/src/Router.php index e4a5cf4..6f61456 100644 --- a/src/Router.php +++ b/src/Router.php @@ -191,9 +191,11 @@ class Router { $router = Kiri::getDi()->get(DataGrip::class)->get(static::$type); $middleware = \Kiri::getDi()->get(MiddlewareManager::class); - foreach ($router->getMethods() as $method) { + foreach ($router->getMethods() as $name => $method) { $middlewares = $middleware->get($method->getClass(), $method->getMethod()); $method->setMiddlewares($middlewares); + + $router->setMethod($name, $method); } } diff --git a/src/RouterCollector.php b/src/RouterCollector.php index 55273b7..4d8424b 100644 --- a/src/RouterCollector.php +++ b/src/RouterCollector.php @@ -66,6 +66,17 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate } + /** + * @param string $method + * @param HttpRequestHandler $handler + * @return void + */ + public function setMethod(string $method, HttpRequestHandler $handler): void + { + $this->methods[$method] = $handler; + } + + /** * @return array */ @@ -213,11 +224,11 @@ class RouterCollector implements \ArrayAccess, \IteratorAggregate /** * @param string $path * @param string $method - * @return Handler + * @return HttpRequestHandler */ - public function query(string $path, string $method): Handler + public function query(string $path, string $method): HttpRequestHandler { - return $this->methods[$method . '_' . $path] ?? $this->found; + return $this->methods[$method . '_' . $path] ?? new HttpRequestHandler([], $this->found); }