summaryrefslogtreecommitdiff
path: root/src/Middleware/RequestHandler.php
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2018-09-04 18:35:13 +0200
committerIgor Scheller <igor.scheller@igorshp.de>2018-09-04 21:13:28 +0200
commitb52444af8a289e089d1239657cdf6ff06b21b29d (patch)
treec2754b3049a50ad6743841a609ab0574f241720d /src/Middleware/RequestHandler.php
parentb320fc779063ee80b8f0ba505cb323287ccccbf5 (diff)
parenta1bc763a16ee8be109de5c9053fbc5eded53824e (diff)
Merge remote-tracking branch 'MyIgel/routing'
Diffstat (limited to 'src/Middleware/RequestHandler.php')
-rw-r--r--src/Middleware/RequestHandler.php50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/Middleware/RequestHandler.php b/src/Middleware/RequestHandler.php
new file mode 100644
index 00000000..e1381abf
--- /dev/null
+++ b/src/Middleware/RequestHandler.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Engelsystem\Middleware;
+
+use Engelsystem\Application;
+use InvalidArgumentException;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\MiddlewareInterface;
+use Psr\Http\Server\RequestHandlerInterface;
+
+class RequestHandler implements MiddlewareInterface
+{
+ use ResolvesMiddlewareTrait;
+
+ /** @var Application */
+ protected $container;
+
+ /**
+ * @param Application $container
+ */
+ public function __construct(Application $container)
+ {
+ $this->container = $container;
+ }
+
+ /**
+ * Process an incoming server request and return a response, optionally delegating
+ * response creation to a handler.
+ *
+ * @param ServerRequestInterface $request
+ * @param RequestHandlerInterface $handler
+ * @return ResponseInterface
+ */
+ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
+ {
+ $requestHandler = $request->getAttribute('route-request-handler');
+ $requestHandler = $this->resolveMiddleware($requestHandler);
+
+ if ($requestHandler instanceof MiddlewareInterface) {
+ return $requestHandler->process($request, $handler);
+ }
+
+ if ($requestHandler instanceof RequestHandlerInterface) {
+ return $requestHandler->handle($request);
+ }
+
+ throw new InvalidArgumentException('Unable to process request handler of type ' . gettype($requestHandler));
+ }
+}