From 49924c68d42fa2000adf383250d5edc0d3ab09df Mon Sep 17 00:00:00 2001 From: alexmerlin Date: Thu, 20 Mar 2025 18:24:50 +0200 Subject: [PATCH] Issue #7: Merge group middlewares with route handlers Signed-off-by: alexmerlin --- README.md | 2 +- src/RouteGroupCollector.php | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 58df691..483e67b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Documentation is available at: https://docs.dotkernel.org/dot-router/. ## Badges ![OSS Lifecycle](https://img.shields.io/osslifecycle/dotkernel/dot-router) -![PHP from Packagist (specify version)](https://img.shields.io/packagist/php-v/dotkernel/dot-router/1.0.3) +![PHP from Packagist (specify version)](https://img.shields.io/packagist/php-v/dotkernel/dot-router/1.0.4) [![GitHub issues](https://img.shields.io/github/issues/dotkernel/dot-router)](https://github.com/dotkernel/dot-router/issues) [![GitHub forks](https://img.shields.io/github/forks/dotkernel/dot-router)](https://github.com/dotkernel/dot-router/network) diff --git a/src/RouteGroupCollector.php b/src/RouteGroupCollector.php index 7e739e6..5f9b03d 100644 --- a/src/RouteGroupCollector.php +++ b/src/RouteGroupCollector.php @@ -10,7 +10,7 @@ use Psr\Http\Server\RequestHandlerInterface; use function array_filter; -use function count; +use function array_merge; use function in_array; use function is_array; use function is_callable; @@ -183,7 +183,19 @@ public function prepareMiddleware( string|array|callable|MiddlewareInterface|RequestHandlerInterface $middleware, array|string $excludeMiddleware = [], ): MiddlewareInterface { - if (count($excludeMiddleware) === 0 || is_callable($middleware)) { + if (is_string($excludeMiddleware)) { + $excludeMiddleware = [$excludeMiddleware]; + } + + $prependMiddleware = []; + if ($this->middleware !== null) { + $prependMiddleware = $this->middleware; + if (! is_array($prependMiddleware)) { + $prependMiddleware = [$prependMiddleware]; + } + } + + if (is_callable($middleware)) { return $this->middlewareFactory->prepare($middleware); } @@ -191,10 +203,7 @@ public function prepareMiddleware( $middleware = [$middleware]; } - if (is_string($excludeMiddleware)) { - $excludeMiddleware = [$excludeMiddleware]; - } - + $middleware = array_merge($prependMiddleware, $middleware); $middleware = array_filter( $middleware, function (callable|string|MiddlewareInterface|RequestHandlerInterface $item) use ($excludeMiddleware) {