Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gebe ich einen benutzerdefinierten HTTP-Body mit CakePHP 3.4 aus?

Wie gebe ich einen benutzerdefinierten HTTP-Body mit CakePHP 3.4 aus?

DDD
DDDOriginal
2024-10-26 17:42:30732Durchsuche

How to Output Custom HTTP Body with CakePHP 3.4?

Ausgabe eines benutzerdefinierten HTTP-Bodys mit CakePHP 3.4

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:

  • Es kann dazu führen, dass Daten in Testumgebungen nicht erkannt werden.
  • Es beeinträchtigt die Fähigkeit, die richtigen Header festzulegen.
  • Es kann zu abgeschnittenen Daten führen Daten.

Richtige Ausgabemethoden

Es gibt zwei empfohlene Ansätze zum Senden benutzerdefinierter Ausgaben:

  1. 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>
  2. 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:

  • Kochbuch: Controller > Controller-Aktionen
  • Kochbuch: Anforderungs- und Antwortobjekte > Den Körper festigen
  • Kochbuch: Ansichten > JSON- und XML-Ansichten
  • PHP FIG-Standards: PSR-7 HTTP-Nachrichtenschnittstellen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn