summaryrefslogtreecommitdiff
path: root/src/AbstractStrategy.php
diff options
context:
space:
mode:
authorSam Light <sam@lightscale.co.uk>2026-06-10 19:00:32 +0100
committerSam Light <sam@lightscale.co.uk>2026-06-10 19:00:32 +0100
commitb899a995e2fd977fbf7497b36b2dbc8d641ef398 (patch)
treee35680ea490fb486da43012bbfaaee8b7ee27f8c /src/AbstractStrategy.php
parent57e101668e62aab7d332c1c2f403eee9511de626 (diff)
Started structure for middleware
Diffstat (limited to 'src/AbstractStrategy.php')
-rw-r--r--src/AbstractStrategy.php32
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);
+ }
+}