Web应用程序处理请求时,会生成一个响应对象,其中包含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-如果将Web浏览器指向http:// localhost:8080 / index.php?r = site / testresponse,则应注意201 Created response 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。
步骤3-修改actionTestResponse函数,如以下代码所示。
public function actionTestResponse() { throw new \yii\web\GoneHttpException; }
步骤4-在Web浏览器的地址栏中键入http:// localhost:8080 / index.php?r = site / test-response,您可以看到410 Gone响应HTTP状态,如下图所示。
第5步-您可以通过修改响应组件的headers属性来发送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 -由警予\网络\ HtmlResponseFormatter实现。
- XML-由yii \ web \ XmlResponseFormatter实现。
- JSON -由警予\网络\ 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标头来实现浏览器重定向。您可以调用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() -将文本字符串作为文件发送。
以此方式修改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()方法遵循以下步骤:
- 触发yii \ web \ Response :: EVENT_BEFORE_SEND事件。
- 调用yii \ web \ Response :: prepare()方法。
- 触发yii \ web \ Response :: EVENT_AFTER_PREPARE事件。
- 调用yii \ web \ Response :: sendHeaders()方法。
- 调用yii \ web \ Response :: sendContent()方法。
- 触发yii \ web \ Response :: EVENT_AFTER_SEND事件。
作者:terry,如若转载,请注明出处:https://www.web176.com/yii/526.html