Maison >développement back-end >tutoriel php >Comment générer un corps HTTP personnalisé avec CakePHP 3.4 ?

Comment générer un corps HTTP personnalisé avec CakePHP 3.4 ?

DDD
DDDoriginal
2024-10-26 17:42:30811parcourir

How to Output Custom HTTP Body with CakePHP 3.4?

Sortie d'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 :

  • Cela peut conduire à des données non reconnues dans les environnements de test.
  • Cela interfère avec la capacité de définir des en-têtes appropriés.
  • Cela peut entraîner des fichiers tronqués data.

Méthodes de sortie appropriées

Il existe deux approches recommandées pour envoyer une sortie personnalisée :

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

  • Livre de recettes : Contrôleurs > Actions du contrôleur
  • Livre de recettes : Objets de requête et de réponse > Définir le corps
  • Livre de recettes : Vues > Vues JSON et XML
  • Normes PHP FIG : interfaces de messages HTTP PSR-7

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn