ホームページ >バックエンド開発 >PHPチュートリアル >CakePHP 3.4 でカスタム HTTP ボディを出力するには?
CakePHP 3.4 では、ヘッダー処理により厳密なアプローチが導入され、コントローラー内でのデータの直接エコーが禁止されています。以下に示すように、コンテンツをエコーしようとすると、「ヘッダーを発行できません」というエラーが発生します:
<code class="php">public function test() { $this->autoRender = false; echo json_encode(['method' => __METHOD__, 'class' => get_called_class()]); }</code>
CakePHP が文句を言う理由
この方法は CakePHP では推奨されませんいくつかの理由により、
適切な出力方法
カスタム出力を送信するには、次の 2 つの推奨アプローチがあります。
応答オブジェクトの設定:
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>
シリアル化されたビューを使用する:
<code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()]; $this->set('content', $content); $this->set('_serialize', 'content');</code>
このメソッドでは、JSON レンダリングを利用するためにリクエスト ハンドラー コンポーネントと適切な URL マッピングが必要です。
参考資料
詳細については、次のリソースを参照してください。
以上がCakePHP 3.4 でカスタム HTTP ボディを出力するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。