以 JSON 或 XML 格式发送数据在 Web API 中很常见。开箱即用,PSR-7 实现不支持这些格式,您必须自己解码 Request 对象的 getBody()。由于这是一个常见的要求,Slim 4 提供了BodyParsingMiddleware
处理这个任务的方法。
建议将正文解析中间件放在调用之前
addErrorMiddlware
,这样栈看起来是这样的:
<?php
use Slim\Factory\AppFactory;
require_once __DIR__ . '/../vendor/autoload.php';
$app = AppFactory::create();
// Parse json, form data and xml
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
// ...
$app->run();
不需要对 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
从请求标头中读取以检测媒体类型。application/*