Dans CakePHP 3.4, pourquoi l'écho du contenu du corps HTTP personnalisé provoque l'erreur « Impossible d'émettre des en-têtes »
Dans CakePHP 3.4, écho du corps HTTP personnalisé le contenu des méthodes du contrôleur peut conduire à l'erreur « Impossible d'émettre des en-têtes ». En effet, depuis la version 3.4, les données en écho provenant des contrôleurs sont explicitement vérifiées pour les en-têtes envoyés et une erreur est déclenchée si des données sont trouvées.
Pourquoi ce changement ?
Dans les versions antérieures de CakePHP, l'écho des données dans les contrôleurs était autorisé. Cependant, cette pratique peut entraîner des problèmes, notamment :
Pour résoudre ces problèmes, CakePHP nécessite désormais la configuration appropriée de l'objet de réponse ou l'utilisation de vues sérialisées lors de l'envoi d'une sortie personnalisée.
Façons appropriées d'envoyer une sortie personnalisée
Configurer la 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>
Utilisation de Response::getBody :
<code class="php">$content = json_encode(['method' => __METHOD__, 'class' => get_called_class()]); $this->response->getBody()->write($content); 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 approche nécessite le composant de gestionnaire de requêtes et une configuration d'URL appropriée ou un en-tête application/json accept dans la requête.
Conclusion
En utilisant les méthodes spécifiées au lieu de faire écho aux données, vous pouvez vous assurer que le contenu du corps HTTP personnalisé est envoyé sans erreurs et que les conventions de CakePHP sont respectées, conduisant à des applications plus fiables et maintenables.
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!