diff options
| author | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:32 +0100 |
|---|---|---|
| committer | Sam Light <sam@lightscale.co.uk> | 2026-06-10 19:00:32 +0100 |
| commit | b899a995e2fd977fbf7497b36b2dbc8d641ef398 (patch) | |
| tree | e35680ea490fb486da43012bbfaaee8b7ee27f8c /src/AbstractStrategy.php | |
| parent | 57e101668e62aab7d332c1c2f403eee9511de626 (diff) | |
Started structure for middleware
Diffstat (limited to 'src/AbstractStrategy.php')
| -rw-r--r-- | src/AbstractStrategy.php | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/AbstractStrategy.php b/src/AbstractStrategy.php new file mode 100644 index 0000000..54b78c1 --- /dev/null +++ b/src/AbstractStrategy.php @@ -0,0 +1,32 @@ +<?php + +declare(strict_types=1); + +namespace Lightscale\Router; + +use Lightscale\Router\Contracts\Middleware; +use Lightscale\Router\Contracts\Strategy; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +abstract class AbstractStrategy implements Strategy +{ + /** + * @param Middleware[] $middlewares + * @param callable(RequestInterface): ResponseInterface $handler + */ + public function runMiddleware( + RequestInterface $request, + array $middlewares, + callable $handler, + ): ResponseInterface { + $handler = count($middlewares) > 0 ? array_reduce( + array_reverse($middlewares), + fn (callable $handler, Middleware $middleware) => fn (ServerRequestInterface $request) => $middleware->handle($request, $handler), + $handler + ) : $handler; + + return $handler($request); + } +} |
