engelsystem/src/Middleware/ResolvesMiddlewareTrait.php

54 lines
1.5 KiB
PHP
Raw Normal View History

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