CakePHP 3.4에서 사용자 정의 HTTP 본문 내용을 에코하면 "헤더를 내보낼 수 없습니다" 오류가 발생하는 이유
CakePHP 3.4에서 사용자 정의 HTTP 본문을 에코합니다. 컨트롤러 메서드의 콘텐츠에 "헤더를 내보낼 수 없습니다" 오류가 발생할 수 있습니다. 이는 3.4부터 컨트롤러의 에코 데이터가 전송된 헤더에 대해 명시적으로 검사되고, 헤더가 발견되면 오류가 발생하기 때문입니다.
이 변경 이유
CakePHP의 이전 버전에서는 컨트롤러에 데이터를 에코하는 것이 허용되었습니다. 그러나 이렇게 하면 다음과 같은 문제가 발생할 수 있습니다.
이러한 문제를 해결하기 위해 이제 CakePHP에서는 사용자 정의 출력을 보낼 때 응답 개체를 올바르게 구성하거나 직렬화된 뷰를 사용해야 합니다.
사용자 정의 출력을 보내는 올바른 방법
응답 구성
PSR-7 호환 인터페이스 사용:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response = $this->response->withStringBody($content); $this->response = $this->response->withType('json'); return $this->response;</code>
더 이상 사용되지 않는 인터페이스 사용:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->body($content); $this->response->type('json'); return $this->response;</code>
Response::getBody:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->getBody()->write($content); return $this->response;</code>
직렬화된 뷰 사용
<code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()]; $this->set('content', $content); $this->set('_serialize', 'content');</code>
이 접근 방식에는 요청 처리기 구성 요소와 적절한 URL 구성이 필요합니다. 또는 요청의 application/json accept 헤더.
결론
데이터를 에코하는 대신 지정된 방법을 사용하면 사용자 정의 HTTP 본문 콘텐츠가 전송되도록 할 수 있습니다. 오류 없이 CakePHP의 규칙을 준수하여 더욱 안정적이고 유지 관리가 용이한 애플리케이션을 만들 수 있습니다.
위 내용은 CakePHP 3.4에서 사용자 정의 HTTP 본문 콘텐츠를 에코하면 \'헤더를 내보낼 수 없습니다\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!