CakePHP 3.4 führt einen strengeren Ansatz für die Header-Verarbeitung ein und verhindert das direkte Echo von Daten innerhalb von Controllern. Der Versuch, Inhalte wiederzugeben, wie unten dargestellt, führt zu der Fehlermeldung „Kopfzeilen können nicht ausgegeben werden“:
<code class="php">public function test() { $this->autoRender = false; echo json_encode(['method' => __METHOD__, 'class' => get_called_class()]); }</code>
Warum sich CakePHP beschwert
Von dieser Vorgehensweise wird in CakePHP abgeraten Aus mehreren Gründen:
Richtige Ausgabemethoden
Es gibt zwei empfohlene Ansätze zum Senden benutzerdefinierter Ausgaben:
Konfigurieren Sie das Antwortobjekt:
Verwenden Sie die PSR-7-kompatible Schnittstelle:
<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>
Verwenden Sie die veraltete Schnittstelle:
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->body($content); $this->response->type('json'); return $this->response;</code>
Verwenden Sie eine serialisierte Ansicht:
<code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()]; $this->set('content', $content); $this->set('_serialize', 'content');</code>
Diese Methode erfordert die Request-Handler-Komponente und die entsprechende URL-Zuordnung, um das JSON-Rendering zu nutzen.
Referenzmaterial
Weitere Informationen finden Sie in den folgenden Ressourcen:
Das obige ist der detaillierte Inhalt vonWie gebe ich einen benutzerdefinierten HTTP-Body mit CakePHP 3.4 aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!