正文解析
在 Web API 中以 JSON 或 XML 格式发送数据非常常见。默认情况下,PSR-7 的实现不支持这些格式,你必须自己解码请求对象的 getBody() 。由于这是一个常见的需求,Slim 4 提供了 BodyParsingMiddleware 来处理此任务。
使用方法
建议将 body parsing 中间件放在调用 addErrorMiddlware 之前,这样中间件栈的顺序如下:
<?php
use Slim\Factory\AppFactory;
require_once __DIR__ . '/../vendor/autoload.php';
$app = AppFactory::create();
// 解析json、表单数据和xml
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
// ...
$app->run();
发送的 JSON、表单或 XML 数据
对于 POST 处理程序不需要进行任何更改,因为 BodyParsingMiddleware 会检测到 Content-Type 设置为 JSON 媒体类型,然后将解码后的主体放入请求的解析主体属性中。
对于从浏览器发布到网站的数据,可以使用 $request 的 getParsedBody() 方法。它将返回所发布数据的数组形式。
$app->post('/', function (Request $request, Response $response, $args): Response {
$data = $request->getParsedBody();
$html = var_export($data, true);
$response->getBody()->write($html);
return $response;
});
媒体类型检测
- 中间件从请求头中读取
Content-Type以检测媒体类型。 - 检查是否注册了此特定媒体类型的解析器。
- 如果没有,会查找带有结构化语法后缀(RFC 6839)的媒体类型,例如
application/*。
支持的媒体类型
- application/json
- application/x-www-form-urlencoded
- application/xml
- text/xml