ajgarlag/psr15-dispatcher

用于调度 PSR-15 中间件的组件

0.4.3 2023-08-24 11:17 UTC

This package is auto-updated.

Last update: 2024-08-24 13:23:43 UTC


README

Psr15 Dispatcher 组件允许您调度 PSR-15 中间件。

Build Status Latest Stable Version Latest Unstable Version Total Downloads Montly Downloads Daily Downloads License

安装

要安装此组件的最新稳定版本,请打开控制台并执行以下命令

$ composer require ajgarlag/psr15-dispatcher

用法

首先,您必须有一个实现 RequestHandlerInterface 或封装在 RequestHandlerInterface 实现中的应用程序,您希望使用多个 PSR-15 中间件进行调度。

/* @var $requestHandler RequestHandlerInterface */
$requestHandler = new YourApp();

现在,您可以选择使用 PipeStack 来调度您的应用程序。

Pipe 调度

使用此选项,您创建一个 Pipe,连接所需的中间件,最后通过管道处理服务器请求,将您的应用程序作为请求处理程序传递

use Ajgarlag\Psr15\Dispatcher\Pipe;

$pipe = Pipe::create()
    ->withConnectedMiddleware(new FirstMiddleware())
    ->withConnectedMiddleware(new MiddleMiddleware())
    ->withConnectedMiddleware(new LastMiddleware())
;

$response = $pipe->process($request, $requestHandler);

Pipe 类实现了 PSR-15 MiddlewareInterface,因此它可以连接到另一个 Pipe

Pipe 初始化

您可以将中间件的 FIFO 数组传递给 Pipe 以进行初始化

$pipe = Pipe::create([
    new FirstMiddleware(),
    new MiddleMiddleware(),
    new LastMiddleware(),
]);

Stack 调度

使用此选项,您将应用程序请求处理程序包装在一个 Stack 实例中,推送所需的中间件,最后通过堆栈处理服务器请求。请注意,为了实现与上一个 Pipe 相同的行为,您必须以 反向 顺序推送中间件

use Ajgarlag\Psr15\Dispatcher\Stack;

$stack = Stack::create($requestHandler)
    ->withPushedMiddleware(new LastMiddleware())
    ->withPushedMiddleware(new MiddleMiddleware())
    ->withPushedMiddleware(new FirstMiddleware())
;

$response = $stack->handle($request);

Stack 类实现了 PSR-15 RequestHandlerInterface,因此它可以被另一个 Stack 包装。

Stack 初始化

您可以将中间件的 LIFO 数组传递给 Stack 以进行初始化

$stack = Stack::create($requestHandler, [
    new LastMiddleware(),
    new MiddleMiddleware(),
    new FirstMiddleware(),
]);

Pipe 推送到堆栈

我首选的选项是构建一个自然顺序连接中间件的 Pipe,然后将其推送到堆栈中,但这只是个人喜好

$stack = Stack::create($requestHandler);
$pipe = Pipe::create()
    ->withConnectedMiddleware(new FirstMiddleware())
    ->withConnectedMiddleware(new MiddleMiddleware())
    ->withConnectedMiddleware(new LastMiddleware())
;

$application = $stack->withPushedMiddleware($pipe);

许可

此组件受 MIT 许可证的保护。有关完整的许可证信息,请参阅 LICENSE 文件。

报告问题或功能请求

问题和功能请求在 Github 问题跟踪器 中跟踪。

作者信息

Antonio J. García Lagar 用爱开发。

如果您认为这个组件很有用,请在 GitHub 仓库页面 和/或 Packagist 软件包页面 上添加 ★。