Учебники

Yii — Ответы

Когда веб-приложение обрабатывает запрос, оно генерирует объект ответа, который содержит заголовки HTTP, тело и код состояния HTTP. В большинстве случаев вы будете использовать компонент приложения ответа. По умолчанию это экземпляр yii \ web \ Response .

Для управления HTTP-кодами ответа используйте свойство yii \ web \ Response :: $ statusCode . Значение по умолчанию yii \ web \ Response :: $ statusCode равно 200.

Шаг 1 — Добавьте функцию с именем actionTestResponse в SiteController .

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

Шаг 2. Если вы указываете свой веб-браузер по адресу http: // localhost: 8080 / index.php? R = site / testresponse , вы должны заметить, что HTTP-статус 201 Создан ответ.

HTTP-статус созданного ответа

Если вы хотите указать, что запрос не выполнен, вы можете выбросить одно из предопределенных исключений 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, как показано на следующем рисунке.

Gone Response HTTP Status

Шаг 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 .

Ответ 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

Файл favicon.ico

Ответ не отправляется до тех пор, пока не будет вызвана функция yii \ web \ Response :: send () . По умолчанию этот метод вызывается в конце метода yii \ base \ Application :: run () . Чтобы отправить ответ, метод yii \ web \ Response :: send () выполняет следующие действия: