Yii - Respuestas
Cuando una aplicación web maneja una solicitud, genera un objeto de respuesta, que contiene encabezados HTTP, cuerpo y código de estado HTTP. En la mayoría de los casos, utilizará el componente de aplicación de respuesta. De forma predeterminada, es una instancia deyii\web\Response.
Para administrar los códigos de estado HTTP de respuesta, use el yii\web\Response::$statusCodepropiedad. El valor predeterminado deyii\web\Response::$statusCode es 200.
Step 1 - Agregar una función llamada actionTestResponse al SiteController.
public function actionTestResponse() {
Yii::$app→response->statusCode = 201;
}
Step 2 - Si apunta su navegador web a http://localhost:8080/index.php?r=site/testresponse, debería observar el estado HTTP de respuesta 201 Creado.
Si desea indicar que la solicitud no tuvo éxito, puede lanzar una de las excepciones HTTP predefinidas:
yii\web\BadRequestHttpException - código de estado 400.
yii\web\UnauthorizedHttpException - código de estado 401.
yii\web\ForbiddenHttpException - código de estado 403.
yii\web\NotFoundHttpException - código de estado 404.
yii\web\MethodNotAllowedHttpException - código de estado 405.
yii\web\NotAcceptableHttpException - código de estado 406.
yii\web\ConflictHttpException - código de estado 409.
yii\web\GoneHttpException - código de estado 410.
yii\web\UnsupportedMediaTypeHttpException - código de estado 415.
yii\web\TooManyRequestsHttpException - código de estado 429.
yii\web\ServerErrorHttpException - código de estado 500.
Step 3 - Modificar el actionTestResponse funcionan como se muestra en el siguiente código.
public function actionTestResponse() {
throw new \yii\web\GoneHttpException;
}
Step 4 - Tipo http://localhost:8080/index.php?r=site/test-response en la barra de direcciones del navegador web, puede ver el 410 Gone estado HTTP de respuesta como se muestra en la siguiente imagen.
Step 5 - Puede enviar encabezados HTTP modificando el headerspropiedad del componente de respuesta. Para agregar un nuevo encabezado a una respuesta, modifique elactionTestResponse funcionan como se indica en el siguiente código.
public function actionTestResponse() {
Yii::$app->response->headers->add('Pragma', 'no-cache');
}
Step 6 - Ir a http://localhost:8080/index.php?r=site/test-response, verá nuestro encabezado Pragma.
Yii admite los siguientes formatos de respuesta:
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 - la respuesta sin ningún formato.
Step 7 - Responder en el JSON formato, modificar el actionTestResponse función.
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 - Ahora, escriba http://localhost:8080/index.php?r=site/test-response en la barra de direcciones, puede ver lo siguiente JSON respuesta.
Yii implementa una redirección del navegador enviando un encabezado HTTP de ubicación. Puedes llamar alyii\web\Response::redirect() método para redirigir el navegador del usuario a una URL.
Step 9 - Modificar el actionTestResponse funciona de esta manera.
public function actionTestResponse() {
return $this->redirect('http://www.tutorialspoint.com/');
}
Ahora, si vas a http://localhost:8080/index.php?r=site/test-response, su navegador será redirigido a la TutorialsPoint sitio web.
Envío de archivos
Yii proporciona los siguientes métodos para admitir el envío de archivos:
yii\web\Response::sendFile() - Envía un archivo existente.
yii\web\Response::sendStreamAsFile() - Envía una secuencia de archivos existente como un archivo.
yii\web\Response::sendContentAsFile() - Envía una cadena de texto como archivo.
Modifique la función actionTestResponse de esta manera:
public function actionTestResponse() {
return \Yii::$app->response->sendFile('favicon.ico');
}
Tipo http://localhost:8080/index.php?r=site/test-response, verá una ventana de diálogo de descarga para favicon.ico archivo -
La respuesta no se envía hasta que yii\web\Response::send()se llama a la función. De forma predeterminada, este método se llama al final de layii\base\Application::run()método. Para enviar una respuesta, elyii\web\Response::send() El método sigue estos pasos:
- Activa el evento yii \ web \ Response :: EVENT_BEFORE_SEND.
- Llama al método yii \ web \ Response :: prepare ().
- Activa el evento yii \ web \ Response :: EVENT_AFTER_PREPARE.
- Llama al método yii \ web \ Response :: sendHeaders ().
- Llama al método yii \ web \ Response :: sendContent ().
- Activa el evento yii \ web \ Response :: EVENT_AFTER_SEND.