telegraph / middleware
Telegraph 兼容的中间件装饰器。
Requires
- psr/http-message: ~1.0
Requires (Dev)
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/json
或 application/vnd.api+json
的 Content-Type
头。如果这两个条件都满足,它会解析 JSON 并将其作为 $request
的 解析后的正文 提供,然后将其传递给 $next
。如果方法是 GET
或 Content-Type
头定义了不同的 mime 类型,JsonContentHandler 会忽略 $request
并继续链式调用。
要将 JsonContentHandler 添加到您的队列中,直接实例化...
$queue[] = new \Telegraph\Middleware\JsonContentHandler();
...或使用您选择的 $resolver
从 $queue
中实例化它。
要在后续中间件中访问解码的参数,请使用 $request
的 getParsedBody()
方法
$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 分钟。