alexpts / php-simple-middlewares
与PSR-7兼容的简单中间件管理器
Requires
- php: >7.1
- psr/http-message: ^1.0.1
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- phpunit/phpunit: 6.2.1
This package is auto-updated.
Last update: 2024-09-15 02:24:36 UTC
README
(已弃用) 与PSR-7兼容的简单中间件
MiddlewaresManager 允许配置软件中间件执行的顺序。每个中间件接收一个 $request
请求对象作为输入,可以选择对其进行操作或创建一个新的 $request
对象并将其传递给下一个中间件,等待其返回一个响应对象。然后它可以对响应对象进行操作,或者简单地将其传递给上一个中间件。
中间件可以选择不调用下一个中间件,而是将结果返回给先前的中间件。也就是说,每个中间件会得到两次控制权。在 $request
对象传递时和 $response
对象返回时。
为了确保组件的灵活性和可集成性,中间件处理器不受任何接口的限制。处理器可以是任何可调用的类型,它将接收两个参数 ServerRequestInterface $request
和 callable $next
。为了更正式的开发,每个处理器都可以支持正式的接口 MiddlewareInterface
。
返回的 $response
对象的类型也没有任何限制。您可以从处理器返回任何类型,例如数组或类型为 ResponseInterface (psr-7) 的对象。您可以正式地限制返回值的类型,通过在 PHP 7 中指定返回值的类型。
安装
$ composer require alexpts/php-simple-middlewares
示例
任意处理器
use Psr\Http\Message\ServerRequestInterface; use PTS\Middleware\MiddlewareManager; $middlewareManager = new MiddlewareManager(); $middlewareManager->push(function($request, $next){ /* optionally modify the request */ $request = $request->...; /* optionally skip the $next middleware and return early */ if (...) { return $response; } /* optionally invoke the $next middleware and get back a new response */ $response = $next($request); /* optionally modify the Response if desired */ $response = $response->...; return $response; });
多个 MiddlewareInterface
处理器
use Psr\Http\Message\ServerRequestInterface; use PTS\Middleware\MiddlewareManager; use PTS\Middleware\MiddlewareInterface; class MiddlewareA implements MiddlewareInterface { public function __invoke(ServerRequestInterface $request, callable $next) { $method = $request->getMethod(); if (method !== 'GET') { return new JsonResponse(['status' => 405], 405); } $response = $next($request); /* optionally modify the Response if desired */ $response = $response->...; return $response; } } class FrontController implements MiddlewareInterface { public function __invoke(ServerRequestInterface $request, callable $next) { /* ... some work and create response */ return $response; } } $middlewareManager = new MiddlewareManager(); $middlewareManager->push(new MiddlewareA); $middlewareManager->push(new FrontController); /* ... PSR-7 $request */ $response = $middlewareManager($request);
错误/异常处理器
如果将中间件视为独立的应用程序,则每个处理器在出现错误或异常时必须返回一个PSR-7响应。这样的响应应按相反顺序遍历整个中间件链。
$middlewareManager = new MiddlewareManager(); $middlewareManager->push(new MiddlewareA); $middlewareManager->push(new FrontController, function (\Throwable $ex) { return new JsonResponse(['error' => $ex->getMessage()], 500); }); $response = $middlewareManager($request);