- Yii 教程
 - Yii - 主页
 - Yii - 概述
 - Yii - 安装
 - Yii - 创建页面
 - Yii - 应用程序结构
 - Yii - 入口脚本
 - Yii - 控制器
 - Yii - 使用控制器
 - Yii - 使用动作
 - Yii - 模型
 - Yii - 小部件
 - Yii - 模块
 - Yii - 视图
 - Yii - 布局
 - Yii - 资产
 - Yii - 资产转换
 - Yii - 扩展
 - Yii - 创建扩展
 - Yii - HTTP 请求
 - Yii - 响应
 - Yii - URL 格式
 - Yii - URL 路由
 - Yii - URL 规则
 - Yii - HTML 表单
 - Yii - 验证
 - Yii - 临时验证
 - Yii - AJAX 验证
 - Yii - 会话
 - Yii - 使用闪存数据
 - Yii - cookie
 - Yii - 使用 Cookie
 - Yii - 文件上传
 - Yii - 格式化
 - Yii - 分页
 - Yii - 排序
 - Yii - 属性
 - Yii - 数据提供者
 - Yii - 数据小部件
 - Yii - 列表视图小部件
 - Yii - GridView 小部件
 - Yii - 活动
 - Yii - 创建事件
 - Yii - Behave
 - Yii - 创建Behave
 - Yii - 配置
 - Yii - 依赖注入
 - Yii - 数据库访问
 - Yii - 数据访问对象
 - Yii - 查询生成器
 - Yii - 活动记录
 - Yii - 数据库迁移
 - Yii - 主题化
 - Yii - RESTful API
 - Yii - RESTful API 的实际应用
 - Yii - 字段
 - Yii - 测试
 - Yii - 缓存
 - Yii - 片段缓存
 - Yii - 别名
 - Yii - 日志记录
 - Yii - 错误处理
 - Yii - 身份验证
 - Yii - 授权
 - Yii - 本地化
 - Yii-Gii
 - Gii – 创建模型
 - Gii – 生成控制器
 - Gii – 生成模块
 
- Yii 有用的资源
 - Yii - 快速指南
 - Yii - 有用的资源
 - Yii - 讨论
 
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 - 如果您将 Web 浏览器指向http://localhost:8080/index.php?r=site/testresponse,您应该注意到 201 Created 响应 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 - 由 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 通过发送 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\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 事件。