2018-08-25 21:16:20 +02:00
|
|
|
<?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
|
|
|
|
*
|
|
|
|
* @return MiddlewareInterface|RequestHandlerInterface
|
|
|
|
*/
|
2022-12-14 00:28:34 +01:00
|
|
|
protected function resolveMiddleware(string|callable|MiddlewareInterface|RequestHandlerInterface $middleware)
|
2018-08-25 21:16:20 +02:00
|
|
|
{
|
|
|
|
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
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
*/
|
2022-12-14 00:28:34 +01:00
|
|
|
protected function isMiddleware(mixed $middleware)
|
2018-08-25 21:16:20 +02:00
|
|
|
{
|
|
|
|
return ($middleware instanceof MiddlewareInterface || $middleware instanceof RequestHandlerInterface);
|
|
|
|
}
|
|
|
|
}
|