ボディ解析ミドルウェア

Web API でデータを送信するために JSON または XML 形式を使用するのはごく一般的です。PSR-7 実装はすぐにこれらの形式をサポートしません。要求オブジェクトの getBody() を自分でデコードする必要があります。一般的な要件であるため、Slim 4 は BodyParsingMiddleware を提供して、このタスクを処理します。

使用方法

body 解析ミドルウェアを 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 データ

Content-TypeJSON メディアタイプに設定されていることを BodyParsingMiddleware が検出し、デコードされたボディを Request の解析された body プロパティに配置するので、POST ハンドラーに変更は必要ありません。

ブラウザーから Web サイトに投稿されたデータの場合、$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