Skip to content

Commit e0e4e0c

Browse files
committed
feat(router): add ability to skip middleware per route
1 parent cf504ad commit e0e4e0c

File tree

17 files changed

+86
-9
lines changed

17 files changed

+86
-9
lines changed

packages/router/src/Connect.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::CONNECT;
2325
}

packages/router/src/Delete.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::DELETE;
2325
}

packages/router/src/GenericRouter.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@ private function getCallable(): HttpMiddlewareCallable
7777

7878
foreach ($middlewareStack->unwrap() as $middlewareClass) {
7979
$callable = new HttpMiddlewareCallable(function (Request $request) use ($middlewareClass, $callable) {
80+
// We skip this middleware if it's ignored by the route
81+
if ($this->container->has(MatchedRoute::class)) {
82+
$matchedRoute = $this->container->get(MatchedRoute::class);
83+
84+
if (in_array($middlewareClass->getName(), $matchedRoute->route->without, strict: true)) {
85+
return $callable($request);
86+
}
87+
}
88+
8089
/** @var HttpMiddleware $middleware */
8190
$middleware = $this->container->get($middlewareClass->getName());
8291

packages/router/src/Get.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::GET;
2325
}

packages/router/src/Head.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::HEAD;
2325
}

packages/router/src/Options.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::OPTIONS;
2325
}

packages/router/src/Patch.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::PATCH;
2325
}

packages/router/src/Post.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::POST;
2325
}

packages/router/src/Put.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
public Method $method;
1414

1515
/**
16-
* @param class-string<HttpMiddleware>[] $middleware
16+
* @param class-string<HttpMiddleware>[] $middleware Middleware specific to this route.
17+
* @param class-string<HttpMiddleware>[] $without Middleware to remove from this route.
1718
*/
1819
public function __construct(
1920
public string $uri,
2021
public array $middleware = [],
22+
public array $without = [],
2123
) {
2224
$this->method = Method::PUT;
2325
}

packages/router/src/Route.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,9 @@ interface Route
2020
public array $middleware {
2121
get;
2222
}
23+
24+
/** @var class-string<HttpMiddleware>[] */
25+
public array $without {
26+
get;
27+
}
2328
}

0 commit comments

Comments
 (0)