Yii - Réponses

Lorsqu'une application Web traite une demande, elle génère un objet de réponse, qui contient les en-têtes HTTP, le corps et le code d'état HTTP. Dans la plupart des cas, vous utiliserez le composant d'application de réponse. Par défaut, il s'agit d'une instance deyii\web\Response.

Pour gérer les codes d'état HTTP de réponse, utilisez le yii\web\Response::$statusCodepropriété. La valeur par défaut deyii\web\Response::$statusCode est 200.

Step 1 - Ajouter une fonction nommée actionTestResponse à la SiteController.

public function actionTestResponse() {
   Yii::$app→response->statusCode = 201;
}

Step 2 - Si vous pointez votre navigateur Web sur http://localhost:8080/index.php?r=site/testresponse, vous devriez remarquer le statut HTTP de la réponse 201 Created.

Si vous souhaitez indiquer que la demande a échoué, vous pouvez lever l'une des exceptions HTTP prédéfinies -

  • yii\web\BadRequestHttpException - code d'état 400.

  • yii\web\UnauthorizedHttpException - code d'état 401.

  • yii\web\ForbiddenHttpException - code d'état 403.

  • yii\web\NotFoundHttpException - code d'état 404.

  • yii\web\MethodNotAllowedHttpException - code d'état 405.

  • yii\web\NotAcceptableHttpException - code d'état 406.

  • yii\web\ConflictHttpException - code d'état 409.

  • yii\web\GoneHttpException - code d'état 410.

  • yii\web\UnsupportedMediaTypeHttpException - code d'état 415.

  • yii\web\TooManyRequestsHttpException - code d'état 429.

  • yii\web\ServerErrorHttpException - code d'état 500.

Step 3 - Modifier le actionTestResponse fonction comme indiqué dans le code suivant.

public function actionTestResponse() {
   throw new \yii\web\GoneHttpException;
}

Step 4 - Type http://localhost:8080/index.php?r=site/test-response dans la barre d'adresse du navigateur Web, vous pouvez voir le 410 Gone état HTTP de la réponse, comme illustré dans l'image suivante.

Step 5 - Vous pouvez envoyer des en-têtes HTTP en modifiant le headerspropriété du composant de réponse. Pour ajouter un nouvel en-tête à une réponse, modifiez leactionTestResponse fonction comme indiqué dans le code suivant.

public function actionTestResponse() {
   Yii::$app->response->headers->add('Pragma', 'no-cache');
}

Step 6 - Aller à http://localhost:8080/index.php?r=site/test-response, vous verrez notre en-tête Pragma.

Yii prend en charge les formats de réponse suivants -

  • HTML - implémenté par yii \ web \ HtmlResponseFormatter.

  • XML - implémenté par yii \ web \ XmlResponseFormatter.

  • JSON - implémenté par yii \ web \ JsonResponseFormatter.

  • JSONP - implémenté par yii \ web \ JsonResponseFormatter.

  • RAW - la réponse sans aucun formatage.

Step 7 - Pour répondre dans le JSON format, modifiez le actionTestResponse fonction.

public function actionTestResponse() {
   \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
   return [
      'id' => '1',
      'name' => 'Ivan',
      'age' => 24,
      'country' => 'Poland',
      'city' => 'Warsaw'
   ];
}

Step 8 - Maintenant, tapez http://localhost:8080/index.php?r=site/test-response dans la barre d'adresse, vous pouvez voir ce qui suit JSON réponse.

Yii implémente une redirection de navigateur en envoyant un en-tête HTTP Location. Vous pouvez appeler leyii\web\Response::redirect() méthode pour rediriger le navigateur de l'utilisateur vers une URL.

Step 9 - Modifier le actionTestResponse fonctionner de cette façon.

public function actionTestResponse() {
   return $this->redirect('http://www.tutorialspoint.com/');
}

Maintenant, si vous allez à http://localhost:8080/index.php?r=site/test-response, votre navigateur sera redirigé au TutorialsPoint site Internet.

Envoi de fichiers

Yii fournit les méthodes suivantes pour prendre en charge l'envoi de fichiers -

  • yii\web\Response::sendFile() - Envoie un fichier existant.

  • yii\web\Response::sendStreamAsFile() - Envoie un flux de fichiers existant sous forme de fichier.

  • yii\web\Response::sendContentAsFile() - Envoie une chaîne de texte sous forme de fichier.

Modifiez la fonction actionTestResponse de cette façon -

public function actionTestResponse() {
   return \Yii::$app->response->sendFile('favicon.ico');
}

Type http://localhost:8080/index.php?r=site/test-response, vous verrez une fenêtre de dialogue de téléchargement pour le favicon.ico fichier -

La réponse n'est pas envoyée tant que le yii\web\Response::send()la fonction est appelée. Par défaut, cette méthode est appelée à la fin duyii\base\Application::run()méthode. Pour envoyer une réponse, leyii\web\Response::send() méthode suit ces étapes -

  • Déclenche l'événement yii \ web \ Response :: EVENT_BEFORE_SEND.
  • Appelle la méthode yii \ web \ Response :: prepare ().
  • Déclenche l'événement yii \ web \ Response :: EVENT_AFTER_PREPARE.
  • Appelle la méthode yii \ web \ Response :: sendHeaders ().
  • Appelle la méthode yii \ web \ Response :: sendContent ().
  • Déclenche l'événement yii \ web \ Response :: EVENT_AFTER_SEND.