ホームページ >バックエンド開発 >PHPチュートリアル >CakePHP 3.4 でカスタム HTTP 本文の内容をエコーすると「ヘッダーを出力できません」エラーが発生するのはなぜですか?
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 中国語 Web サイトの他の関連記事を参照してください。