Yii - Respostas

Quando um aplicativo da web lida com uma solicitação, ele gera um objeto de resposta, que contém cabeçalhos HTTP, corpo e código de status HTTP. Na maioria dos casos, você usará o componente de aplicativo de resposta. Por padrão, é uma instância deyii\web\Response.

Para gerenciar os códigos de status HTTP de resposta, use o yii\web\Response::$statusCodepropriedade. O valor padrão deyii\web\Response::$statusCode é 200.

Step 1 - Adicione uma função chamada actionTestResponse ao SiteController.

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

Step 2 - Se você apontar seu navegador para http://localhost:8080/index.php?r=site/testresponse, você deve observar o status HTTP de resposta 201 Criado.

Se você quiser indicar que a solicitação não foi bem-sucedida, você pode lançar uma das exceções HTTP predefinidas -

  • yii\web\BadRequestHttpException - código de status 400.

  • yii\web\UnauthorizedHttpException - código de status 401.

  • yii\web\ForbiddenHttpException - código de status 403.

  • yii\web\NotFoundHttpException - código de status 404.

  • yii\web\MethodNotAllowedHttpException - código de status 405.

  • yii\web\NotAcceptableHttpException - código de status 406.

  • yii\web\ConflictHttpException - código de status 409.

  • yii\web\GoneHttpException - código de status 410.

  • yii\web\UnsupportedMediaTypeHttpException - código de status 415.

  • yii\web\TooManyRequestsHttpException - código de status 429.

  • yii\web\ServerErrorHttpException - código de status 500.

Step 3 - Modifique o actionTestResponse função conforme mostrado no código a seguir.

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

Step 4 - Tipo http://localhost:8080/index.php?r=site/test-response na barra de endereço do navegador da web, você pode ver o 410 Gone status HTTP de resposta conforme mostrado na imagem a seguir.

Step 5 - Você pode enviar cabeçalhos HTTP modificando o headerspropriedade do componente de resposta. Para adicionar um novo cabeçalho a uma resposta, modifique oactionTestResponse função conforme fornecido no código a seguir.

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

Step 6 - Vá para http://localhost:8080/index.php?r=site/test-response, você verá nosso cabeçalho Pragma.

Yii suporta os seguintes formatos de resposta -

  • HTML - implementado por yii \ web \ HtmlResponseFormatter.

  • XML - implementado por yii \ web \ XmlResponseFormatter.

  • JSON - implementado por yii \ web \ JsonResponseFormatter.

  • JSONP - implementado por yii \ web \ JsonResponseFormatter.

  • RAW - a resposta sem qualquer formatação.

Step 7 - Para responder no JSON formato, modifique o actionTestResponse função.

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 - Agora digite http://localhost:8080/index.php?r=site/test-response na barra de endereço, você pode ver o seguinte JSON resposta.

O Yii implementa um redirecionamento do navegador enviando um cabeçalho HTTP Location. Você pode ligar para oyii\web\Response::redirect() método para redirecionar o navegador do usuário para um URL.

Step 9 - Modifique o actionTestResponse funcionar desta forma.

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

Agora, se você for para http://localhost:8080/index.php?r=site/test-response, seu navegador será redirecionado para o TutorialsPoint local na rede Internet.

Enviando arquivos

O Yii fornece os seguintes métodos para apoiar o envio de arquivos -

  • yii\web\Response::sendFile() - Envia um arquivo existente.

  • yii\web\Response::sendStreamAsFile() - Envia um fluxo de arquivo existente como um arquivo.

  • yii\web\Response::sendContentAsFile() - Envia uma string de texto como um arquivo.

Modifique a função actionTestResponse desta forma -

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

Tipo http://localhost:8080/index.php?r=site/test-response, você verá uma janela de diálogo de download para o favicon.ico arquivo -

A resposta não é enviada até o yii\web\Response::send()função é chamada. Por padrão, este método é chamado no final doyii\base\Application::run()método. Para enviar uma resposta, oyii\web\Response::send() método segue estas etapas -

  • Aciona o evento yii \ web \ Response :: EVENT_BEFORE_SEND.
  • Chama o método yii \ web \ Response :: prepare ().
  • Aciona o evento yii \ web \ Response :: EVENT_AFTER_PREPARE.
  • Chama o método yii \ web \ Response :: sendHeaders ().
  • Chama o método yii \ web \ Response :: sendContent ().
  • Aciona o evento yii \ web \ Response :: EVENT_AFTER_SEND.