0 follower

Final Class Yiisoft\Middleware\Dispatcher\MiddlewareFactory

InheritanceYiisoft\Middleware\Dispatcher\MiddlewareFactory

Creates a PSR-15 middleware based on the definition provided.

Method Details

Hide inherited methods

__construct() public method

public mixed __construct ( \Psr\Container\ContainerInterface $container, Yiisoft\Middleware\Dispatcher\ParametersResolverInterface|null $parametersResolver null )
$container \Psr\Container\ContainerInterface

Container to use for resolving definitions.

$parametersResolver Yiisoft\Middleware\Dispatcher\ParametersResolverInterface|null

                public function __construct(
    private readonly ContainerInterface $container,
    private readonly ?ParametersResolverInterface $parametersResolver = null
) {
}

            
create() public method

public \Psr\Http\Server\MiddlewareInterface create ( array|callable|string $middlewareDefinition )
$middlewareDefinition array|callable|string

Middleware definition in one of the following formats:

  • A name of PSR-15 middleware class. The middleware instance will be obtained from container and executed.
  • A name of PSR-15 request handler class. The request handler instance will be obtained from container and executed.
  • A name of invokable class. The invokable class instance will be obtained from container and executed.
  • An identifier of container definition for PSR-15 middleware. The middleware instance will be obtained from container and executed.
  • A callable with function(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface signature.
  • Any callable.
  • A controller handler action in format [TestController::class, 'index']. TestController instance will be created and index() method will be executed.
  • A function returning a middleware. The middleware returned will be executed.

For handler action and callable typed parameters are automatically injected using dependency injection container. Current request and handler could be obtained by type-hinting for {@see \Psr\Http\Message\ServerRequestInterface} and {@see \Psr\Http\Server\RequestHandlerInterface}.

throws Yiisoft\Middleware\Dispatcher\InvalidMiddlewareDefinitionException

                public function create(array|callable|string $middlewareDefinition): MiddlewareInterface
{
    if ($this->isMiddlewareClassDefinition($middlewareDefinition)) {
        /** @var MiddlewareInterface */
        return $this->container->get($middlewareDefinition);
    }
    if ($this->isRequestHandlerClassDefinition($middlewareDefinition)) {
        return $this->wrapCallable([$middlewareDefinition, 'handle']);
    }
    if ($this->isInvokableClassDefinition($middlewareDefinition)) {
        return $this->wrapCallable([$middlewareDefinition, '__invoke']);
    }
    if ($this->isCallableDefinition($middlewareDefinition)) {
        return $this->wrapCallable($middlewareDefinition);
    }
    if ($this->isArrayDefinition($middlewareDefinition)) {
        /**
         * @var MiddlewareInterface
         *
         * @psalm-suppress InvalidArgument Need for Psalm version 4.* only.
         */
        return ArrayDefinition::fromConfig($middlewareDefinition)->resolve($this->container);
    }
    if ($this->isContainerAlias($middlewareDefinition)) {
        /** @var mixed $resolvedDefinition */
        $resolvedDefinition = $this->container->get($middlewareDefinition);
        if ($resolvedDefinition instanceof MiddlewareInterface) {
            return $resolvedDefinition;
        }
    }
    throw new InvalidMiddlewareDefinitionException($middlewareDefinition);
}