pawel-jakowczyk/middleware

负责处理中间件的请求处理器

0.1.0 2021-06-05 20:13 UTC

This package is auto-updated.

Last update: 2024-09-06 03:28:46 UTC


README

Tests

此存储库包含MiddlewareFactoryRequestHandler,该处理器实现了Psr\Http\Server\RequestHandlerInterface接口。请求处理器负责处理中间件集合和最终请求处理器。

要定义中间件集合和请求处理器,需要创建MiddlewareFactory和HandlerFactory的实现。然后,将这些工厂传递给请求,分别在AttributeNames::MIDDLEWARE_FACTORY和AttributeNames::HANDLER_FACTORY下。可以使用MiddlewareRoute来将工厂作为路由默认值传递。

使用工厂的原因是,避免过早创建带有依赖的对象,这些对象可能不会被使用。通过使用工厂,它们将在MiddlewareFactoryRequestHandler执行期间创建。

安装

composer require pawel-jakowczyk/middleware

使用方法

use Laminas\Diactoros\Response;
use Laminas\Diactoros\ServerRequest;
use PJ\Middleware\AttributeNames;
use PJ\Middleware\HandlerFactory;
use PJ\Middleware\MiddlewareFactoryRequestHandler;
use PJ\Middleware\EmptyMiddlewareFactory;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\RequestHandlerInterface;

(new MiddlewareFactoryRequestHandler())->handle(
    (new ServerRequest())
        ->withAttribute(
            AttributeNames::MIDDLEWARE_FACTORY,
            new EmptyMiddlewareFactory()
        )
        ->withAttribute(
            AttributeNames::HANDLER_FACTORY,
            new class () implements HandlerFactory {
                public function createRequestHandler(): RequestHandlerInterface
                {
                    return new class() implements RequestHandlerInterface
                    {
                        public function handle(ServerRequestInterface $request): ResponseInterface
                        {
                            return new Response();
                        }
                    };
                }
            }
        )
);