gamringer / pipe
PSR-15 HTTP 中间件分发器
1.1
2018-11-10 20:49 UTC
Requires
Requires (Dev)
- guzzlehttp/psr7: ^1.4
- phan/phan: ^1.1
- phpmd/phpmd: ^2.6
- phpstan/phpstan: ^0.10.5
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-07 00:32:38 UTC
README
无假设的 PSR-15 处理器
许可证
Pipe 采用 MIT 许可证授权。
安装
$ composer require gamringer/pipe
测试
$ composer install $ phpunit
文档
以下是 Pipe 可以使用的各种方式。这些示例可以在 examples 目录中找到。首先,以下代码在所有示例中假设是存在的:
<?php declare(strict_types=1); include __DIR__.'/../vendor/autoload.php'; use GuzzleHttp\Psr7\ServerRequest; use GuzzleHttp\Psr7\Response; use gamringer\Pipe\Pipe; use gamringer\Pipe\Example\StaticMiddleware; // Request to be handled later $request = new ServerRequest('GET', '/'); // For use in this example, we build a few Middleware objects // One that simply returns a predetermined response in all cases $staticResponse = new Response(); $staticResponseMiddleware = new StaticMiddleware($staticResponse); // One that echoes it's constructor argument before passing to the next one. $fooMiddleware = new FooMiddleware('1');
从中间件数组创建 pipe
// Build Pipe from an array of Middlewares $pipe = new Pipe([ $staticResponseMiddleware, ]); // Use Pipe via RequestHandlerInterface $response = $pipe->handle($request);
创建一个空 pipe 并动态添加中间件
// Build empty Pipe $pipe = new Pipe(); // Add Middlewares dynamically $pipe->push($staticResponseMiddleware); // Use Pipe via RequestHandlerInterface $response = $pipe->handle($request);
动态堆叠多个中间件
// Build empty Pipe $pipe = new Pipe(); // Add Middlewares dynamically $pipe->push($fooMiddleware); $pipe->push($staticResponseMiddleware); // Use Pipe via RequestHandlerInterface $response = $pipe->handle($request);
将 pipe 用作中间件
Pipe 还可以通过 MiddlewareInterface 通过将其推入另一个 pipe 来使用
// Build empty Pipe $pipe = new Pipe(); // Add Middlewares dynamically $pipe->push($fooMiddleware); $pipe->push(new Pipe([ new FooMiddleware('2') ])); $pipe->push($staticResponseMiddleware); // Use Pipe via RequestHandlerInterface $response = $pipe->handle($request);
中间件用尽
如果没有中间件可以调用,Pipe 将根据其被调用的方式以不同的方式响应。
作为 RequestHandler
大多数应用程序将使用 Pipe 作为 RequestHandler 来堆叠中间件并处理用户请求。如果请求通过 Pipe,并且最后一个中间件尝试委派给下一个中间件,将引发一个 TerminalException。相同的逻辑也适用于空 pipe 的情况
$pipe = new Pipe(); $pipe->handle($request); // Throws new \gamringer\Pipe\TerminalException()
作为中间件
如果作为中间件调用,当自身没有中间件时,它将简单地传递给其下一个兄弟
// Build empty Pipe $pipe = new Pipe(); // Add Middlewares dynamically $pipe->push($fooMiddleware); $pipe->push(new Pipe([ new FooMiddleware('2') ])); $pipe->push(new Pipe()); $pipe->push($staticResponseMiddleware); // Use Pipe via RequestHandlerInterface $response = $pipe->handle($request);