diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Router.php | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/Router.php b/src/Router.php index 46eadd8..d70b278 100644 --- a/src/Router.php +++ b/src/Router.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Lightscale\Router; +use Lightscale\Router\Contracts\Middleware; use Lightscale\Router\Contracts\Strategy; use Lightscale\Router\Enums\HttpMethod; use Lightscale\Router\Enums\PathSegmentType; @@ -117,17 +118,29 @@ class Router ); } + /** @return Middleware[] */ + private function getRouteMiddleware(Route $route): array + { + return [ + ...$this->getMiddleware(), + ...($route->getGroup() ?? []), + ...$route->getMiddleware(), + ]; + return []; + } + public function dispatch(RequestInterface $request): ResponseInterface { $uri = $request->getUri(); $match = $this->findRoute($request->getMethod(), $uri->getPath()); + if (null === $match) { return $this->strategy->notFound($request); } return $this->strategy->runMiddleware( $request, - [], + $this->getRouteMiddleware($match->route), fn ($request) => $this->strategy->runRoute(new RouteCall( $request, $match->route, |
