engelsystem/src/Middleware/ResolvesMiddlewareTrait.php

55 lines
1.5 KiB
PHP
Raw Normal View History

<?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
*/
protected function resolveMiddleware(string|callable|MiddlewareInterface|RequestHandlerInterface $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
*
* @return bool
*/
protected function isMiddleware(mixed $middleware)
{
return ($middleware instanceof MiddlewareInterface || $middleware instanceof RequestHandlerInterface);
}
}