Yii响应


当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步 - 如果您将浏览器指向 http:// localhost:8080 / index.php?r = site / testresponse ,您应该注意到201 Created的HTTP状态。

创建响应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 =站点/测试响应 ,您可以看到 410 Gone 响应HTTP状态,如下图所示。

Gone Response 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头文件。

Pragma标题

Yii支持以下响应格式 -

  • 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 =站点/测试响应 ,您可以看到以下 JSON 响应。

JSON响应

Yii通过发送Location HTTP头来实现浏览器重定向。您可以调用 yii \ web \ Response :: redirect() 方法将用户浏览器重定向到URL。

第9步 - 以 这种方式修改 actionTestResponse 函数。

public function actionTestResponse() {
   return $this->redirect('http://www.codingdict.com/');
}

现在,如果您转到 http:// localhost:8080 / index.php?r = site / test-response, 您的浏览器将在 codingdict 网站上重定向。

发送文件

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 =站点/测试响应 ,您将看到 favicon.ico 文件的下载对话窗口-

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事件。