echo-fusion / middlewaremanager
一个中间件管理器实现了PSR-15和PSR-7
v1.0.1
2024-09-30 15:52 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- guzzlehttp/psr7: 3.0.x-dev
- psr/container: ^2.0
- psr/http-message: ^2.0@dev
- psr/http-server-middleware: ^1.0@dev
Requires (Dev)
- echo-fusion/codestandard: ^1.0
- friendsofphp/php-cs-fixer: dev-master
- phpunit/phpunit: ^9.5
- vimeo/psalm: 5.x-dev
README
这是一个用于管理PHP应用程序中中间件的灵活包。它允许您创建一个中间件管道,其中中间件处理请求并将其传递给下一个,提供了一个干净且组织良好的方式来处理中间件逻辑。
此包符合PSR-1、PSR-2、PSR-7和PSR-15。
安装
通过Composer安装此包
composer require echo-fusion/middlewaremanager
要求
此版本支持以下PHP版本。
- PHP 8.1
- PHP 8.2
- PHP 8.3
用法
以下是使用MiddlewareManager设置和运行中间件管道的步骤。
1. 定义处理器
在适当的目录中定义您的处理器,并将其中一个传递给中间件管理器以在管道末尾运行
use Psr\Http\Message\ResponseFactoryInterface use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; class MyMiddlewareHandler implements RequestHandlerInterface { public function __construct(private readonly ResponseFactoryInterface $responseFactory) { } public function handle(ServerRequestInterface $request): ResponseInterface { // write your code here return $this->responseFactory->createResponse(); } }
2. 定义中间件
在适当的目录中以单独的文件定义您的中间件
use EchoFusion\MiddlewareManager\MiddlewareManager; use EchoFusion\MiddlewareManager\MiddlewarePipeline; use Psr\Container\ContainerInterface; use Psr\Http\Message\ServerRequestInterface; class CoreMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // ex: manipulate request $request = $request->withAttribute('key','value'); return $handler->handle($request); } } class OtherMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { $response = $handler->handle($request); // ex: manipulate response return $this->convertedResponse($response); } }
3. 运行MiddlewareManager
要将中间件添加到管理器中,您有两种选择
- 将中间件添加为“核心中间件”,它始终在之后添加的任何中间件之前运行。
- 动态添加中间件(例如,用于添加特定路由的中间件很有用)。
以下是如何运行MiddlewareManager的示例
注意:不要忘记在您的容器中实例化以下注入的依赖项。
use Psr\Container\ContainerInterface; use Psr\Http\Message\ServerRequestInterface; use EchoFusion\MiddlewareManager\MiddlewarePipelineInterface; function (ContainerInterface $container, ServerRequestInterface $request, MiddlewarePipelineInterface $pipeline) { // optional $coreMiddlewares = [ CoreMiddleware::class, ]; $middlewareManager = new MiddlewareManager( $container, $pipeline, $coreMiddlewares ); // add or remove your necessary middlewares if you want $middlewareManager->add(OtherMiddleware::class); $middlewareManager->remove(OtherMiddleware::class); // ... // instantiate handler directly or get from container to resolve possible dependencies $handler = new MyMiddlewareHandler(); $response = $middlewareManager->dispatch($request, $handler); echo $response; }
测试
测试包括PHPUnit和PHPStan(第7级)。
$ composer test
致谢
由Amir Shadanfar开发和维护。
在LinkedIn上建立联系。
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。