Skip to content

Commit e4dcb94

Browse files
committed
Prevent route groups with middlewares to affect the request in the next routes
1 parent 0c12602 commit e4dcb94

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

src/Router.php

+5-2
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,12 @@ private function handleRoutes(ServerRequestInterface $request): ResponseInterfac
7979
$newRouter = new Router(
8080
$route,
8181
$this->container,
82-
$this->handle(...),
8382
);
84-
return $newRouter->handle($request);
83+
try {
84+
return $newRouter->handle($request);
85+
} catch (EmptyRouteStack) {
86+
continue;
87+
}
8588
}
8689

8790
$matchedParams = $route->match($request);

tests/MiddlewaresTest.php

+22
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,26 @@ public static function providerInvalidMiddlewares(): array
119119
],
120120
];
121121
}
122+
123+
public function testRouteGroupWithMiddlewareDoesNotAffectTheNextRoutes(): void
124+
{
125+
$routeGroup = new RouteGroup([
126+
new RouteGroup(
127+
routes: [
128+
Route::get(path: '/no', callback: static fn(): ResponseInterface => self::response('NO')),
129+
],
130+
middlewares: [
131+
fn($request, $handler) => self::response(
132+
strrev((string)$handler->handle($request)->getBody())
133+
)
134+
],
135+
),
136+
Route::get(path: '/', callback: static fn(): ResponseInterface => self::response('TEST')),
137+
]);
138+
$request = self::serverRequest('GET', '/');
139+
140+
$response = $this->router($routeGroup)->handle($request);
141+
142+
self::assertEquals('TEST', (string)$response->getBody());
143+
}
122144
}

0 commit comments

Comments
 (0)