0 follower

Final Class Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareFactory

InheritanceYiisoft\Queue\Middleware\Consume\ConsumeMiddlewareFactory » Yiisoft\Queue\Middleware\MiddlewareFactory
ImplementsYiisoft\Queue\Middleware\Consume\ConsumeMiddlewareFactoryInterface

Creates a middleware based on the definition provided.

Protected Properties

Hide inherited properties

Property Type Description Defined By
$container \Psr\Container\ContainerInterface Yiisoft\Queue\Middleware\MiddlewareFactory

Method Details

Hide inherited methods

__construct() public method
public mixed __construct ( \Psr\Container\ContainerInterface $container, Yiisoft\Queue\Middleware\CallableFactory $callableFactory )
$container \Psr\Container\ContainerInterface
$callableFactory Yiisoft\Queue\Middleware\CallableFactory

                public function __construct(
    protected readonly ContainerInterface $container,
    private readonly CallableFactory $callableFactory,
) {}

            
create() protected method
protected \Yiisoft\Queue\Middleware\T create ( callable|array|string $definition )
$definition callable|array|string

Middleware definition in one of the following formats:

return \Yiisoft\Queue\Middleware\T

Middleware instance

throws Yiisoft\Queue\Middleware\InvalidMiddlewareDefinitionException

                protected function create(callable|array|string $definition): object
{
    try {
        $callable = $this->callableFactory->create($definition);
        return $this->wrapMiddleware($callable);
    } catch (InvalidCallableConfigurationException) {
        // Not a callable, try internal checks
    }
    if (is_string($definition)) {
        return $this->getFromContainer($definition);
    }
    if (is_array($definition)) {
        return $this->tryGetFromArrayDefinition($definition)
            ?? throw new InvalidMiddlewareDefinitionException($definition);
    }
    throw new InvalidMiddlewareDefinitionException($definition);
}

            
createConsumeMiddleware() public method

public Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareInterface createConsumeMiddleware ( Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareInterface|callable|array|string $middlewareDefinition )
$middlewareDefinition Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareInterface|callable|array|string

Middleware definition in one of the following formats:

  • A middleware object.
  • A name of a middleware class. The middleware instance will be obtained from container and executed.
  • A callable with function(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface signature.
  • 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 \Yiisoft\Queue\Middleware\Consume\ServerRequestInterface} and {@see \Yiisoft\Queue\Middleware\Consume\RequestHandlerInterface}.

throws Yiisoft\Queue\Middleware\InvalidMiddlewareDefinitionException

                public function createConsumeMiddleware(
    ConsumeMiddlewareInterface|callable|array|string $middlewareDefinition,
): ConsumeMiddlewareInterface {
    if ($middlewareDefinition instanceof ConsumeMiddlewareInterface) {
        return $middlewareDefinition;
    }
    $middleware = $this->create($middlewareDefinition);
    if (!$middleware instanceof ConsumeMiddlewareInterface) {
        throw new InvalidMiddlewareDefinitionException($middlewareDefinition);
    }
    return $middleware;
}

            
getInterfaceName() protected method

protected string getInterfaceName ( )

                protected function getInterfaceName(): string
{
    return ConsumeMiddlewareInterface::class;
}

            
wrapMiddleware() protected method

protected Yiisoft\Queue\Middleware\Consume\ConsumeMiddlewareInterface wrapMiddleware ( callable $callback )
$callback callable

                protected function wrapMiddleware(callable $callback): ConsumeMiddlewareInterface
{
    $container = $this->container;
    return new class ($callback, $container) implements ConsumeMiddlewareInterface {
        private $callback;
        public function __construct(
            callable $callback,
            private readonly ContainerInterface $container,
        ) {
            $this->callback = $callback;
        }
        public function processConsume(ConsumeRequest $request, ConsumeHandlerInterface $handler): ConsumeRequest
        {
            $response = (new Injector($this->container))->invoke($this->callback, [$request, $handler]);
            if ($response instanceof ConsumeRequest) {
                return $response;
            }
            if ($response instanceof ConsumeMiddlewareInterface) {
                return $response->processConsume($request, $handler);
            }
            throw new InvalidMiddlewareDefinitionException($this->callback);
        }
    };
}