accruio / response-middleware
兼容Relay的响应中间件。
Requires
- psr/http-message: ~1.0
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-20 18:38:59 UTC
README
本包包含以下兼容Relay的响应中间件
- ResponseSender 发送PSR-7响应
- ExceptionHandler 处理后续中间件抛出的异常
- FormContentHandler 反序列化PSR-7请求的URL编码有效负载
- JsonContentHandler 反序列化PSR-7请求的JSON有效负载
- JsonDecoder 反序列化PSR-7请求的JSON有效负载 (已弃用)
本包可以通过Composer以relay/middleware的方式安装和自动加载。
ResponseSender
ResponseSender 正如其名,它发送PSR-7响应对象。
ResponseSender 对$request或$response不进行任何操作,立即将它们传递给$next。之后,它获取返回的$response并使用header()和echo发送它,并返回发送的$response。
ResponseSender 应该放在Relay队列的顶部,以便它是最后一个有机会对返回的响应进行操作的中间件。
要将ResponseSender添加到您的Relay队列中,直接实例化它...
$queue[] = new \Relay\Middleware\ResponseSender();
...或使用您选择的$resolver从$queue中实例化它。
ExceptionHandler
同样,ExceptionHandler 正如其名,它捕获通过后续中间件装饰器冒泡上来的任何异常。
ExceptionHandler 对$request或$response不进行任何操作,并在try/catch块内部直接将它们传递给$next。如果没有异常冒泡,它返回来自$next的$response。但是,如果它捕获到异常,它返回一个包含异常消息和HTTP 500状态码的全新的$response对象。然后返回新的$response对象。
ExceptionHandler 应该放在Relay队列的顶部附近,但在ResponseSender之后,这样ResponseSender就可以发送返回的$response。
要将ExceptionHandler添加到您的队列中,直接用空的$response实现对象实例化...
$queue = new \Relay\Middleware\ExceptionHandler(new ResponseImplementation());
...或使用您选择的$resolver从$queue中实例化它。
JsonContentHandler
同样,JsonContentHandler 正如其名,它反序列化PSR-7请求对象的JSON有效负载,并将参数提供给后续中间件装饰器。
JsonContentHandler 检查传入请求的方法是否不是GET,以及是否有application/json或application/vnd.api+json的Content-Type头。如果找到这两个条件,它解析JSON并将其作为$request的解析后的正文提供,然后在传递给$next之前和$response一起传递。如果方法是GET或Content-Type头定义了不同的MIME类型,则JsonContentHandler忽略$request并继续链。
要将JsonContentHandler添加到您的队列中,直接实例化...
$queue = new \Relay\Middleware\JsonContentHandler();
...或使用您选择的$resolver从$queue中实例化它。
要访问后续中间件中的解码参数,请使用$request的getParsedBody()方法
$decodedJsonData = $request->getParsedBody();
FormContentHandler
FormContentHandler 几乎与JsonContentHandler完全相同,但它解析以application/x-www-form-urlencoded作为Content-Type的请求的有效负载。
JsonDecoder
注意:此处理程序已被JsonContentHandler取代!
同样,JsonDecoder 正如其名,它反序列化PSR-7请求对象的JSON有效负载,并将参数提供给后续中间件装饰器。
JsonDecoder 检查传入请求的方法是否不是 GET 以及是否包含 application/json 的 Content-Type 头部。如果这两个条件都满足,它会解码 JSON 并将其作为 $request 的 解析后的主体 可用,然后在传递给 $next 之前将解码后的 JSON 和响应传递。如果方法是 GET 或者 Content-Type 头部没有指定 application/json,则 JsonDecoder 对 $request 不做任何操作,并将其和响应传递给 $next。
要将 JsonDecoder 添加到您的队列中,直接实例化它...
$queue = new \Relay\Middleware\JsonDecoder();
...或使用您选择的$resolver从$queue中实例化它。
要访问后续中间件中的解码参数,请使用$request的getParsedBody()方法
$decodedJsonData = $request->getParsedBody();