主体解析中间件

在 web API 中以 JSON 或 XML 格式发送数据非常常见。在开箱即用的情况下,PSR-7 实现不支持这些格式,你必须自己对请求对象的 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();

已发布的 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