Yii 响应

Yii 响应

当一个Web应用程序处理请求时,它会生成一个响应对象,其中包含HTTP头,正文和HTTP状态码。在大多数情况下,您将使用响应应用程序组件。默认情况下,它是 yii\web\Response 的一个实例。

要管理响应的HTTP状态码,使用 yii\web\Response::$statusCode 属性。默认值为 yii\web\Response::$statusCode 是200。

步骤1 - 在 SiteController 中添加一个名为 actionTestResponse 的函数。

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

步骤2 − 如果你的网络浏览器指向 http://localhost:8080/index.php?r=site/testresponse ,你将会注意到 201 Created 响应状态。

Yii 响应

如果你想要表明请求失败,你可以抛出预定义的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 响应

步骤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 响应

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=site/test-response ,您将看到以下内容的 JSON 响应。

Yii 响应

Yii通过发送一个Location 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 响应

直到调用 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事件。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程