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.