diff options
author | msquare <msquare@notrademark.de> | 2018-09-07 20:50:31 +0200 |
---|---|---|
committer | msquare <msquare@notrademark.de> | 2018-09-07 20:50:31 +0200 |
commit | 2d6bca1357faff28bc1f86a56b432cc463ff7574 (patch) | |
tree | ce18461d2e170ac28dd365342a1f125a8a31aa3a /src/Middleware/ResolvesMiddlewareTrait.php | |
parent | b320fc779063ee80b8f0ba505cb323287ccccbf5 (diff) | |
parent | ce6d0fd13b54ac79a955b85d50860736a520d333 (diff) |
Merge branch 'MyIgel-routing'
Diffstat (limited to 'src/Middleware/ResolvesMiddlewareTrait.php')
-rw-r--r-- | src/Middleware/ResolvesMiddlewareTrait.php | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/Middleware/ResolvesMiddlewareTrait.php b/src/Middleware/ResolvesMiddlewareTrait.php new file mode 100644 index 00000000..76557ce6 --- /dev/null +++ b/src/Middleware/ResolvesMiddlewareTrait.php @@ -0,0 +1,56 @@ +<?php + +namespace Engelsystem\Middleware; + +use Engelsystem\Application; +use InvalidArgumentException; +use Psr\Http\Server\MiddlewareInterface; +use Psr\Http\Server\RequestHandlerInterface; + +trait ResolvesMiddlewareTrait +{ + /** + * Resolve the middleware with the container + * + * @param string|callable|MiddlewareInterface|RequestHandlerInterface $middleware + * @return MiddlewareInterface|RequestHandlerInterface + */ + protected function resolveMiddleware($middleware) + { + if ($this->isMiddleware($middleware)) { + return $middleware; + } + + if (!property_exists($this, 'container') || !$this->container instanceof Application) { + throw new InvalidArgumentException('Unable to resolve middleware'); + } + + /** @var Application $container */ + $container = $this->container; + + if (is_string($middleware)) { + $middleware = $container->make($middleware); + } + + if (is_callable($middleware)) { + $middleware = $container->make(CallableHandler::class, ['callable' => $middleware]); + } + + if ($this->isMiddleware($middleware)) { + return $middleware; + } + + throw new InvalidArgumentException('Unable to resolve middleware'); + } + + /** + * Checks if the given object is a middleware or middleware or request handler + * + * @param mixed $middleware + * @return bool + */ + protected function isMiddleware($middleware) + { + return ($middleware instanceof MiddlewareInterface || $middleware instanceof RequestHandlerInterface); + } +} |