hotaruma / pipeline
基于PSR-15、PSR-7和PSR-11标准构建的Pipeline库,用于处理HTTP请求和响应,并支持中间件。
v0.2.3
2023-07-14 15:19 UTC
Requires
- php: >=8.1
- psr/container: ^2.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- mockery/mockery: ^1.6
- phpbench/phpbench: ^1.2
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10
- squizlabs/php_codesniffer: ^3.7
README
用于处理HTTP请求和响应的Pipeline库。
特性
- 与PSR-7 HTTP消息和PSR-11容器的集成。
- 支持中间件/管道链式,以灵活方式处理HTTP请求。
安装
您可以使用Composer安装此库。运行以下命令
composer require hotaruma/pipeline
使用方法
如何使用Pipeline
处理HTTP请求的简单示例
use Hotaruma\Pipeline\Pipeline; $pipeline = new Pipeline(); $pipeline->pipe( ErrorMiddleware::class, LogMiddleware::class, RouteMiddleware::class, ); $response = $pipeline->process($serverRequest, RouteNotFoundMiddleware::class);
通过嵌套管道,可以组合更复杂且可重用的中间件结构,为应用程序开发提供灵活性和模块化。
$authPipeline = new Pipeline(); $authPipeline->pipe( AccessLogMiddleware::class, AuthMiddleware::class, ); $pipeline->pipe( ErrorMiddleware::class, LogMiddleware::class, $authPipeline, ); $response = $pipeline->process($serverRequest, RequestHandler::class);
使用管道作为请求处理器。
$requestHandlerPipeline = new Pipeline(); $requestHandlerPipeline->pipe( LogMiddleware::class, RouteNotFoundMiddleware::class ); $response = $pipeline->process($serverRequest, $requestHandlerPipeline);
管道可以被重置。
$pipeline->rewind();
我们可以将请求处理器作为一个可调用的函数传递。
use Zend\Diactoros\Response; use GuzzleHttp\Psr7\Utils; $response = $pipeline->process($serverRequest, function (ServerRequestInterface $request): ResponseInterface { return (new Response()) ->withStatus(404) ->withHeader('Content-Type', 'text/plain') ->withBody(Utils::streamFor('Not Found')); });
解析器负责解析中间件和请求处理器类,允许在管道中动态检索和实例化这些组件。默认情况下,管道通常使用特定的解析器实现。
use Hotaruma\Pipeline\Resolver\{MiddlewareResolver, RequestHandlerResolver}; $pipeline->middlewareResolver(new MiddlewareResolver()); $pipeline->handlerResolver(new RequestHandlerResolver()); $pipeline->getMiddlewareResolver()->container($container); $pipeline->getRequestHandlerResolver()->container($container);
中间件存储负责管理和存储添加到管道中的中间件。它提供必要的功能来添加、检索和按所需顺序执行中间件。
use Hotaruma\Pipeline\MiddlewareStore\MiddlewareStore; $pipeline->middlewareStore(new MiddlewareStore());
贡献
欢迎贡献!如果您发现了一个错误或有一个新特性的想法,请打开一个问题或提交一个拉取请求。