Dalam CakePHP 3.4, Mengapa Menggemakan Kandungan Badan HTTP Tersuai Menyebabkan Ralat "Tidak Dapat Memancarkan Pengepala"
Dalam CakePHP 3.4, menggemakan badan HTTP tersuai kandungan dalam kaedah pengawal boleh membawa kepada ralat "Tidak dapat memancarkan pengepala". Ini kerana, pada 3.4, data gema daripada pengawal disemak secara eksplisit untuk pengepala dihantar dan ralat akan dicetuskan jika ada yang ditemui.
Mengapa Perubahan Ini?
Dalam versi terdahulu CakePHP, data gema dalam pengawal dibenarkan. Walau bagaimanapun, amalan ini boleh mengakibatkan isu, termasuk:
Untuk menangani masalah ini, CakePHP kini memerlukan konfigurasi yang betul bagi objek respons atau penggunaan paparan bersiri semasa menghantar output tersuai.
Cara yang Betul untuk Menghantar Output Tersuai
Konfigurasikan Respons
Menggunakan antara muka yang mematuhi 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>
Menggunakan antara muka yang tidak digunakan:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->body($content); $this->response->type('json'); return $this->response;</code>
Menggunakan Respons::getBody:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->getBody()->write($content); return $this->response;</code>
Gunakan Paparan Bersiri
<code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()]; $this->set('content', $content); $this->set('_serialize', 'content');</code>
Pendekatan ini memerlukan komponen pengendali permintaan dan konfigurasi URL yang betul atau pengepala aplikasi/json accept dalam permintaan.
Kesimpulan
Dengan menggunakan kaedah yang ditentukan dan bukannya menggemakan data, anda boleh memastikan kandungan badan HTTP tersuai dihantar tanpa ralat dan konvensyen CakePHP dipatuhi, membawa kepada aplikasi yang lebih dipercayai dan boleh diselenggara.
Atas ialah kandungan terperinci Mengapa Menggemakan Kandungan Badan HTTP Tersuai dalam CakePHP 3.4 Menyebabkan Ralat \'Tidak Dapat Memancarkan Pengepala\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!