summaryrefslogtreecommitdiff
path: root/src/Middleware/RequestHandler.php
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2018-09-02 02:13:18 +0200
committerIgor Scheller <igor.scheller@igorshp.de>2018-09-03 15:42:51 +0200
commit9d34f371cb9c5ab0d60bd3158678b9cc9da6cc80 (patch)
treebdf8d9a039fb8e73652e539f7fb33856025e5bb7 /src/Middleware/RequestHandler.php
parent9e217d87c095170460a8580d5215ddf7cbe639f4 (diff)
Added CreditsController
Diffstat (limited to 'src/Middleware/RequestHandler.php')
-rw-r--r--src/Middleware/RequestHandler.php31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/Middleware/RequestHandler.php b/src/Middleware/RequestHandler.php
index e1381abf..ebe1ff9e 100644
--- a/src/Middleware/RequestHandler.php
+++ b/src/Middleware/RequestHandler.php
@@ -35,7 +35,7 @@ class RequestHandler implements MiddlewareInterface
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$requestHandler = $request->getAttribute('route-request-handler');
- $requestHandler = $this->resolveMiddleware($requestHandler);
+ $requestHandler = $this->resolveRequestHandler($requestHandler);
if ($requestHandler instanceof MiddlewareInterface) {
return $requestHandler->process($request, $handler);
@@ -47,4 +47,33 @@ class RequestHandler implements MiddlewareInterface
throw new InvalidArgumentException('Unable to process request handler of type ' . gettype($requestHandler));
}
+
+ /**
+ * @param string|callable|MiddlewareInterface|RequestHandlerInterface $handler
+ * @return MiddlewareInterface|RequestHandlerInterface
+ */
+ protected function resolveRequestHandler($handler)
+ {
+ if (is_string($handler) && strpos($handler, '@') !== false) {
+ list($class, $method) = explode('@', $handler, 2);
+ if (!class_exists($class) && !$this->container->has($class)) {
+ $class = sprintf('Engelsystem\\Controllers\\%s', $class);
+ }
+
+ $handler = [$class, $method];
+ }
+
+ if (
+ is_array($handler)
+ && is_string($handler[0])
+ && (
+ class_exists($handler[0])
+ || $this->container->has($handler[0])
+ )
+ ) {
+ $handler[0] = $this->container->make($handler[0]);
+ }
+
+ return $this->resolveMiddleware($handler);
+ }
}