Когда веб-приложение обрабатывает запрос, оно генерирует объект ответа, который содержит заголовки HTTP, тело и код состояния HTTP. В большинстве случаев вы будете использовать компонент приложения ответа. По умолчанию это экземпляр yii \ web \ Response .
Для управления HTTP-кодами ответа используйте свойство yii \ web \ Response :: $ statusCode . Значение по умолчанию yii \ web \ Response :: $ statusCode равно 200.
Шаг 1 — Добавьте функцию с именем actionTestResponse в SiteController .
public function actionTestResponse() { Yii::$app→response->statusCode = 201; }
Шаг 2. Если вы указываете свой веб-браузер по адресу http: // localhost: 8080 / index.php? R = site / testresponse , вы должны заметить, что HTTP-статус 201 Создан ответ.
Если вы хотите указать, что запрос не выполнен, вы можете выбросить одно из предопределенных исключений HTTP —
-
yii \ web \ BadRequestHttpException — код состояния 400.
-
yii \ web \ UnauthorizedHttpException — код состояния 401.
-
yii \ web \ ForbiddenHttpException — код состояния 403.
-
yii \ web \ NotFoundHttpException — код состояния 404.
-
yii \ web \ MethodNotAllowedHttpException — код состояния 405.
-
yii \ web \ NotAcceptableHttpException — код состояния 406.
-
yii \ web \ ConflictHttpException — код состояния 409.
-
yii \ web \ GoneHttpException — код состояния 410.
-
yii \ web \ UnsupportedMediaTypeHttpException — код состояния 415.
-
yii \ web \ TooManyRequestsHttpException — код состояния 429.
-
yii \ web \ ServerErrorHttpException — код состояния 500.
yii \ web \ BadRequestHttpException — код состояния 400.
yii \ web \ UnauthorizedHttpException — код состояния 401.
yii \ web \ ForbiddenHttpException — код состояния 403.
yii \ web \ NotFoundHttpException — код состояния 404.
yii \ web \ MethodNotAllowedHttpException — код состояния 405.
yii \ web \ NotAcceptableHttpException — код состояния 406.
yii \ web \ ConflictHttpException — код состояния 409.
yii \ web \ GoneHttpException — код состояния 410.
yii \ web \ UnsupportedMediaTypeHttpException — код состояния 415.
yii \ web \ TooManyRequestsHttpException — код состояния 429.
yii \ web \ ServerErrorHttpException — код состояния 500.
Шаг 3 — Измените функцию actionTestResponse, как показано в следующем коде.
public function actionTestResponse() { throw new \yii\web\GoneHttpException; }
Шаг 4 — Введите http: // localhost: 8080 / index.php? R = site / test-response в адресной строке веб-браузера. Вы можете увидеть статус HTTP-ответа 410 Gone response, как показано на следующем рисунке.
Шаг 5 — Вы можете отправлять заголовки HTTP, изменяя свойство заголовков компонента ответа. Чтобы добавить новый заголовок в ответ, измените функцию actionTestResponse, как показано в следующем коде.
public function actionTestResponse() { Yii::$app->response->headers->add('Pragma', 'no-cache'); }
Шаг 6 — Перейдите по адресу http: // localhost: 8080 / index.php? R = site / test-response, вы увидите наш заголовок Pragma.
Yii поддерживает следующие форматы ответов:
-
HTML — реализовано yii \ web \ HtmlResponseFormatter.
-
XML — реализовано yii \ web \ XmlResponseFormatter.
-
JSON — реализовано yii \ web \ JsonResponseFormatter.
-
JSONP — реализовано yii \ web \ JsonResponseFormatter.
-
RAW — ответ без какого-либо форматирования.
HTML — реализовано yii \ web \ HtmlResponseFormatter.
XML — реализовано yii \ web \ XmlResponseFormatter.
JSON — реализовано yii \ web \ JsonResponseFormatter.
JSONP — реализовано yii \ web \ JsonResponseFormatter.
RAW — ответ без какого-либо форматирования.
Шаг 7 — Чтобы ответить в формате JSON , измените функцию actionTestResponse .
public function actionTestResponse() { \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; return [ 'id' => '1', 'name' => 'Ivan', 'age' => 24, 'country' => 'Poland', 'city' => 'Warsaw' ]; }
Шаг 8 — Теперь введите http: // localhost: 8080 / index.php? R = site / test-response в адресной строке, вы можете увидеть следующий ответ JSON .
Yii реализует перенаправление браузера, отправляя HTTP-заголовок Location. Вы можете вызвать метод yii \ web \ Response :: redirect (), чтобы перенаправить браузер пользователя на URL.
Шаг 9 — Модифицируйте функцию actionTestResponse таким образом.
public function actionTestResponse() { return $this->redirect('http://www.tutorialspoint.com/'); }
Теперь, если вы перейдете по адресу http: // localhost: 8080 / index.php? R = site / test-response, ваш браузер будет перенаправлен на веб-сайт TutorialsPoint .
Отправка файлов
Yii предоставляет следующие методы для поддержки отправки файлов:
-
yii \ web \ Response :: sendFile () — отправляет существующий файл.
-
yii \ web \ Response :: sendStreamAsFile () — отправляет существующий файловый поток в виде файла.
-
yii \ web \ Response :: sendContentAsFile () — отправляет текстовую строку в виде файла.
yii \ web \ Response :: sendFile () — отправляет существующий файл.
yii \ web \ Response :: sendStreamAsFile () — отправляет существующий файловый поток в виде файла.
yii \ web \ Response :: sendContentAsFile () — отправляет текстовую строку в виде файла.
Измените функцию actionTestResponse следующим образом:
public function actionTestResponse() { return \Yii::$app->response->sendFile('favicon.ico'); }
Введите http: // localhost: 8080 / index.php? R = site / test-response , вы увидите диалоговое окно загрузки для файла favicon.ico —
Ответ не отправляется до тех пор, пока не будет вызвана функция yii \ web \ Response :: send () . По умолчанию этот метод вызывается в конце метода yii \ base \ Application :: run () . Чтобы отправить ответ, метод yii \ web \ Response :: send () выполняет следующие действия: