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();