hotaruma/pipeline

基于PSR-15、PSR-7和PSR-11标准构建的Pipeline库,用于处理HTTP请求和响应,并支持中间件。

v0.2.3 2023-07-14 15:19 UTC

This package is auto-updated.

Last update: 2024-09-19 22:45:30 UTC


README

Build and Test Latest Version License PHP from Packagist Packagist Downloads codecov

用于处理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());

贡献

欢迎贡献!如果您发现了一个错误或有一个新特性的想法,请打开一个问题或提交一个拉取请求。