Yii - Risposte

Quando un'applicazione Web gestisce una richiesta, genera un oggetto risposta, che contiene intestazioni HTTP, corpo e codice di stato HTTP. Nella maggior parte dei casi, si utilizzerà il componente dell'applicazione di risposta. Per impostazione predefinita, è un'istanza diyii\web\Response.

Per gestire i codici di stato HTTP di risposta, utilizzare il yii\web\Response::$statusCodeproprietà. Il valore predefinito diyii\web\Response::$statusCode è 200.

Step 1 - Aggiungi una funzione denominata actionTestResponse al SiteController.

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

Step 2 - Se punti il ​​tuo browser web su http://localhost:8080/index.php?r=site/testresponse, dovresti notare lo stato HTTP della risposta 201 Created.

Se vuoi indicare che la richiesta non è andata a buon fine, puoi lanciare una delle eccezioni HTTP predefinite:

  • yii\web\BadRequestHttpException - codice di stato 400.

  • yii\web\UnauthorizedHttpException - codice di stato 401.

  • yii\web\ForbiddenHttpException - codice di stato 403.

  • yii\web\NotFoundHttpException - codice di stato 404.

  • yii\web\MethodNotAllowedHttpException - codice di stato 405.

  • yii\web\NotAcceptableHttpException - codice di stato 406.

  • yii\web\ConflictHttpException - codice di stato 409.

  • yii\web\GoneHttpException - codice di stato 410.

  • yii\web\UnsupportedMediaTypeHttpException - codice di stato 415.

  • yii\web\TooManyRequestsHttpException - codice di stato 429.

  • yii\web\ServerErrorHttpException - codice di stato 500.

Step 3 - Modifica il file actionTestResponse funziona come mostrato nel codice seguente.

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

Step 4 - Tipo http://localhost:8080/index.php?r=site/test-response nella barra degli indirizzi del browser web, puoi vedere il file 410 Gone stato HTTP della risposta come mostrato nell'immagine seguente.

Step 5 - Puoi inviare intestazioni HTTP modificando il file headersproprietà del componente risposta. Per aggiungere una nuova intestazione a una risposta, modificare il fileactionTestResponse funziona come indicato nel codice seguente.

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

Step 6 - Vai a http://localhost:8080/index.php?r=site/test-response, vedrai la nostra intestazione Pragma.

Yii supporta i seguenti formati di risposta:

  • HTML - implementato da yii \ web \ HtmlResponseFormatter.

  • XML - implementato da yii \ web \ XmlResponseFormatter.

  • JSON - implementato da yii \ web \ JsonResponseFormatter.

  • JSONP - implementato da yii \ web \ JsonResponseFormatter.

  • RAW - la risposta senza alcuna formattazione.

Step 7 - Per rispondere nel JSON formato, modificare il file actionTestResponse funzione.

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 - Ora digita http://localhost:8080/index.php?r=site/test-response nella barra degli indirizzi, puoi vedere quanto segue JSON risposta.

Yii implementa un reindirizzamento del browser inviando un'intestazione HTTP Location. Puoi chiamare ilyii\web\Response::redirect() metodo per reindirizzare il browser dell'utente a un URL.

Step 9 - Modifica il file actionTestResponse funzionare in questo modo.

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

Ora, se vai a http://localhost:8080/index.php?r=site/test-response, il tuo browser verrà reindirizzato al TutorialsPoint sito web.

Invio di file

Yii fornisce i seguenti metodi per supportare l'invio di file:

  • yii\web\Response::sendFile() - Invia un file esistente.

  • yii\web\Response::sendStreamAsFile() - Invia un flusso di file esistente come file.

  • yii\web\Response::sendContentAsFile() - Invia una stringa di testo come file.

Modifica la funzione actionTestResponse in questo modo:

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

genere http://localhost:8080/index.php?r=site/test-response, vedrai una finestra di dialogo di download per il file favicon.ico file -

La risposta non viene inviata fino a quando il yii\web\Response::send()viene chiamata la funzione. Per impostazione predefinita, questo metodo viene chiamato alla fine del fileyii\base\Application::run()metodo. Per inviare una risposta, ilyii\web\Response::send() metodo segue questi passaggi:

  • Attiva l'evento yii \ web \ Response :: EVENT_BEFORE_SEND.
  • Chiama il metodo yii \ web \ Response :: prepare ().
  • Attiva l'evento yii \ web \ Response :: EVENT_AFTER_PREPARE.
  • Chiama il metodo yii \ web \ Response :: sendHeaders ().
  • Chiama il metodo yii \ web \ Response :: sendContent ().
  • Attiva l'evento yii \ web \ Response :: EVENT_AFTER_SEND.