Maison >développement back-end >tutoriel php >Comment générer un corps HTTP personnalisé avec CakePHP 3.4 ?
CakePHP 3.4 introduit une approche plus stricte de la gestion des en-têtes, interdisant la répercussion directe des données dans les contrôleurs. Tenter de faire écho au contenu, comme indiqué ci-dessous, entraîne l'erreur « Impossible d'émettre des en-têtes » :
<code class="php">public function test() { $this->autoRender = false; echo json_encode(['method' => __METHOD__, 'class' => get_called_class()]); }</code>
Pourquoi CakePHP se plaint
Cette pratique est déconseillée dans CakePHP pour plusieurs raisons :
Méthodes de sortie appropriées
Il existe deux approches recommandées pour envoyer une sortie personnalisée :
Configurez l'objet de réponse :
À l'aide de l'interface compatible 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>
À l'aide de l'interface obsolète :
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->body($content); $this->response->type('json'); return $this->response;</code>
Utiliser une vue sérialisée :
<code class="php">$content = ['method' => __METHOD__, 'class' => get_called_class()]; $this->set('content', $content); $this->set('_serialize', 'content');</code>
Cette méthode nécessite le composant Request Handler et le mappage d'URL approprié pour utiliser le rendu JSON.
Matériel de référence
Pour plus d'informations, reportez-vous aux ressources suivantes :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!