
본문 구문분석 미들웨어 (Body Parsing Middleware)
웹 API에서는 데이터를 JSON 또는 XML 형식으로 전송하는 것이 매우 일반적입니다. PSR-7 구현체는 이러한 형식을 지원하지 않으므로 요청 객체의 getBody()를 직접 디코딩해야 합니다. 공통 요구사항인 만큼 슬림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, Form 또는 XML 데이터 (Posted JSON, form or XML data)
BodyParsingMiddleware는
Content-Type이
JSON` 미디어 유형으로 설정된 것을 감지하여 디코딩된 본문을 Request의 구문 분석된 본문 속성에 배치하므로 POST 핸들러를 변경할 필요가 없습니다.
브라우저에서 웹사이트에 게시된 데이터의 경우 $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;
});
미디어 유형 탐지 (Media type detection)
- 미들웨어는 요청 헤더에서
Content-type
을 읽어 미디어 유형을 탐지합니다. - 이 특정 미디어 유형에 파서가 등록되어 있는지 확인합니다.
- 그렇지 않으면 구조화된 구문 접미사(RFC 6839)가 있는 매체 유형(예:
application/*
)을 찾습니다.
지원되는 미디어 유형 (Supported media types)
- application/json
- application/x-www-form-urlencoded
- application/xml
- text/xml
컨텐츠 길이 미들웨어 (Content Length Middleware)
Content Length 미들웨어는 응답에 Content-Length
헤더를 자동으로 추가합니다. Slim3에서 삭제됐던 addContentLengthHeader
설정을 대체하기 위해서 입니다. 이 미들웨어는 미들웨어 스택 중앙에 위치해야 마지막에 실행됩니다.
사용법
<?php
use Slim\Factory\AppFactory;
use Slim\Middleware\ContentLengthMiddleware;
require __DIR__ . '/../vendor/autoload.php';
$app = AppFactory::create();
$contentLengthMiddleware = new ContentLengthMiddleware();
$app->add($contentLengthMiddleware);
// ...
$app->run();