feat(router): Introduce withMiddleware() for scoped middlewares
This commit is contained in:
@@ -21,6 +21,15 @@ class Router
|
|||||||
private static array $patch = [];
|
private static array $patch = [];
|
||||||
private static array $delete = [];
|
private static array $delete = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores a temporary stack of middlewares to be applied to routes defined
|
||||||
|
* within a specific scope, typically configured by `withMiddleware()`.
|
||||||
|
* These middlewares are active only during the execution of the scope's callback.
|
||||||
|
*
|
||||||
|
* @var array $withMiddlewares<callable>
|
||||||
|
*/
|
||||||
|
private static array $withMiddlewares = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores the method and index of the last configured route, e.g., ['get', 0].
|
* Stores the method and index of the last configured route, e.g., ['get', 0].
|
||||||
* Used for chaining methods like middleware() or reconfigure().
|
* Used for chaining methods like middleware() or reconfigure().
|
||||||
@@ -166,6 +175,28 @@ class Router
|
|||||||
return new static();
|
return new static();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temporarily applies a set of middlewares to routes defined within a given callback.
|
||||||
|
* The middlewares are only active for the duration of the callback execution
|
||||||
|
* and are reset afterwards.
|
||||||
|
*
|
||||||
|
* @param callable $middleware
|
||||||
|
* @param callable $callback
|
||||||
|
*
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public static function withMiddleware(callable $middleware, callable $callback): static
|
||||||
|
{
|
||||||
|
$currentMiddlewares = static::$withMiddlewares;
|
||||||
|
array_unshift(static::$withMiddlewares, $middleware);
|
||||||
|
|
||||||
|
$callback();
|
||||||
|
|
||||||
|
static::$withMiddlewares = $currentMiddlewares; // Restore withMiddleware
|
||||||
|
|
||||||
|
return new static();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reconfigures the final callback of the last route.
|
* Reconfigures the final callback of the last route.
|
||||||
*
|
*
|
||||||
@@ -225,6 +256,13 @@ class Router
|
|||||||
|
|
||||||
static::$$method[] = static::parse($path, $callback);
|
static::$$method[] = static::parse($path, $callback);
|
||||||
static::$last = [$method, count(static::$$method) - 1];
|
static::$last = [$method, count(static::$$method) - 1];
|
||||||
|
|
||||||
|
if (count(static::$withMiddlewares) > 0) {
|
||||||
|
foreach (static::$withMiddlewares as $middleware) {
|
||||||
|
static::middleware($middleware);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new static();
|
return new static();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user