正文解析中间件

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

发布的 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/*

支持的媒体类型

  • 应用程序/json
  • 应用程序/x-www-form-urlencoded
  • 应用程序/xml
  • 文本/xml