Yii – Responses

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状态。

Yii - Responses

如果要指示请求失败,则可以抛出预定义的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状态,如下图所示。

Yii - Responses

第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 - Responses

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 - Responses

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 - Responses

在调用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

(0)
打赏 支付宝 支付宝 微信 微信
terryterry
上一篇 2020年10月26日 下午4:26
下一篇 2020年10月26日 下午4:32

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注