Slim Framework 매뉴얼 미들웨어 – Body Parsing, Content Length

본문 구문분석 미들웨어 (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)

BodyParsingMiddlewareContent-TypeJSON` 미디어 유형으로 설정된 것을 감지하여 디코딩된 본문을 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();