ajgarlag / psr15-dispatcher
用于调度 PSR-15 中间件的组件
Requires
- php: >=8.0
- psr/http-message: ^1.0 || ^2.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.23
- nyholm/psr7: ^1.8
- phpspec/phpspec: ^7.4
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1
This package is auto-updated.
Last update: 2024-08-24 13:23:43 UTC
README
Psr15 Dispatcher 组件允许您调度 PSR-15 中间件。
安装
要安装此组件的最新稳定版本,请打开控制台并执行以下命令
$ composer require ajgarlag/psr15-dispatcher
用法
首先,您必须有一个实现 RequestHandlerInterface 或封装在 RequestHandlerInterface
实现中的应用程序,您希望使用多个 PSR-15 中间件进行调度。
/* @var $requestHandler RequestHandlerInterface */ $requestHandler = new YourApp();
现在,您可以选择使用 Pipe
或 Stack
来调度您的应用程序。
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 软件包页面 上添加 ★。