Skip to content

正文解析

在 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 媒体类型,然后将解码后的主体放入请求的解析主体属性中。

对于从浏览器发布到网站的数据,可以使用 $requestgetParsedBody() 方法。它将返回所发布数据的数组形式。

$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