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
|
|
|
|
*/
|
2022-12-14 19:15:20 +01:00
|
|
|
protected function resolveMiddleware(
|
|
|
|
string|callable|MiddlewareInterface|RequestHandlerInterface $middleware
|
|
|
|
): MiddlewareInterface|RequestHandlerInterface {
|
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');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-12-21 15:11:37 +01:00
|
|
|
* Checks if the given object is a middleware or request handler
|
2018-08-25 21:16:20 +02:00
|
|
|
*/
|
2022-12-14 19:15:20 +01:00
|
|
|
protected function isMiddleware(mixed $middleware): bool
|
2018-08-25 21:16:20 +02:00
|
|
|
{
|
|
|
|
return ($middleware instanceof MiddlewareInterface || $middleware instanceof RequestHandlerInterface);
|
|
|
|
}
|
|
|
|
}
|