>백엔드 개발 >PHP 튜토리얼 >CakePHP 3.4에서 사용자 정의 HTTP 본문 콘텐츠를 에코하면 \'헤더를 내보낼 수 없습니다\' 오류가 발생하는 이유는 무엇입니까?

CakePHP 3.4에서 사용자 정의 HTTP 본문 콘텐츠를 에코하면 \'헤더를 내보낼 수 없습니다\' 오류가 발생하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-28 19:59:02781검색

Why Does Echoing Custom HTTP Body Contents in CakePHP 3.4 Cause

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.