telegraph/middleware

Telegraph 兼容的中间件装饰器。

1.0.0 2016-05-29 21:34 UTC

This package is auto-updated.

Last update: 2024-09-11 04:24:37 UTC


README

此包包含以下与 Telegraph 兼容的中间件

  • ExceptionHandler 用于处理后续中间件抛出的异常
  • FormContentHandler 用于反序列化 PSR-7 请求的 URL 编码有效负载
  • JsonContentHandler 用于反序列化 PSR-7 请求的 JSON 有效负载
  • ResponseSender 用于发送 PSR-7 响应
  • SessionHeadersHandler 用于手动管理会话头,而不是 PHP 自动管理

此包可以通过 Composer 以 telegraph/middleware 的方式安装和 PSR-4 自动加载。

ExceptionHandler

同样,ExceptionHandler 做的就像它的名字一样:它会捕获后续中间件装饰器中冒泡上来的任何异常。

ExceptionHandler$request 不做任何处理,并在 try/catch 块中直接将其传递给 $next。如果没有异常冒泡,它将返回来自 $next$response。然而,如果它捕获到异常,它将返回一个全新的带有异常消息和 HTTP 500 状态码的 $response 对象。然后它返回新的 $response 对象。

ExceptionHandler 应该放置在 Telegraph 队列的顶部,但在 ResponseSender 之后,这样 ResponseSender 就可以发送返回的 $response

要将 ExceptionHandler 添加到您的队列中,直接用空的 $response 实现对象实例化它...

$queue[] = new \Telegraph\Middleware\ExceptionHandler(new ResponseImplementation());

...或使用您选择的 $resolver$queue 中实例化它。

FormContentHandler

FormContentHandler 几乎与下面的 JsonContentHandler 一样工作,但它解析具有 application/x-www-form-urlencoded 作为 Content-Type 的请求的有效负载。

JsonContentHandler

再次,JsonContentHandler 做的就像它的名字一样:它会反序列化 PSR-7 请求对象的 JSON 有效负载并将参数提供给后续的中间件装饰器。

JsonContentHandler 会检查传入的请求是否为除 GET 之外的任何方法,以及是否有 application/jsonapplication/vnd.api+jsonContent-Type 头。如果这两个条件都满足,它会解析 JSON 并将其作为 $request解析后的正文 提供,然后将其传递给 $next。如果方法是 GETContent-Type 头定义了不同的 mime 类型,JsonContentHandler 会忽略 $request 并继续链式调用。

要将 JsonContentHandler 添加到您的队列中,直接实例化...

$queue[] = new \Telegraph\Middleware\JsonContentHandler();

...或使用您选择的 $resolver$queue 中实例化它。

要在后续中间件中访问解码的参数,请使用 $requestgetParsedBody() 方法

$decodedJsonData = $request->getParsedBody();

ResponseSender

ResponseSender 做的就像它的名字一样:它发送 PSR-7 响应对象。

ResponseSender$request 不做任何处理,立即将其传递给 $next。之后,它获取返回的 $response 并使用 header()echo 发送它,然后返回发送的 $response

ResponseSender 应该放在 Telegraph 队列的顶部,这样它就是最后一个有机会对返回的响应做些什么的中间件。

要将 ResponseSender 添加到您的 Telegraph 队列中,直接实例化 ...

$queue[] = new \Telegraph\Middleware\ResponseSender();

...或使用您选择的 $resolver$queue 中实例化它。

SessionHeadersHandler

通常情况下,当调用 session_start() 函数时,PHP 会自动发送头部信息。然而,这意味着这些头部信息不是作为 PSR-7 响应对象的一部分发送,因此它们超出了您的控制。这个处理程序通过将相关头部信息放入 PSR-7 响应中来将这些头部信息重新置于您的控制之下;其行为几乎与 PHP 本地自动会话头部信息的行为相同。

注意:为了让这个中间件正常工作,您必须禁用 PHP 会话头部管理 ini 设置。例如

ini_set('session.use_trans_sid', false);
ini_set('session.use_cookies', false);
ini_set('session.use_only_cookies', true);
ini_set('session.cache_limiter', '');

如果不这样做,处理程序将抛出 RuntimeException 异常。

要将 SessionHeadersHandler 添加到您的队列中,直接实例化它...

$queue[] = new \Telegraph\Middleware\SessionHeadersHandler();

...或使用您选择的 $resolver$queue 中实例化它。

在实例化时,您可以将缓存限制器值作为第一个构造函数参数传递。允许的值是 'nocache'、'public'、'private_no_cache' 或 'priviate'。如果您完全不希望有缓存限制器头部信息,请传递空字符串 ''。默认值为 'nocache'。

您还可以将缓存过期时间(以分钟为单位)作为第二个构造函数参数传递。默认值为 180 分钟。