- 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 - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 创建事件
- Yii - 行为
- Yii - 创建行为
- 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 - 向SiteController添加名为actionTestResponse的函数。
public function actionTestResponse() { Yii::$app→response->statusCode = 201; }
步骤 2 - 如果您将 Web 浏览器指向https://127.0.0.1:8080/index.php?r=site/testresponse,您应该会注意到 201 已创建的响应 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 浏览器的地址栏中键入https://127.0.0.1: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 - 转到https://127.0.0.1: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 - 现在,在地址栏中键入https://127.0.0.1:8080/index.php?r=site/test-response,您可以看到以下JSON响应。
Yii 通过发送 Location HTTP 标头来实现浏览器重定向。您可以调用yii\web\Response::redirect()方法将用户浏览器重定向到 URL。
步骤 9 - 按此方式修改actionTestResponse函数。
public function actionTestResponse() { return $this->redirect('https://tutorialspoint.com/'); }
现在,如果您访问https://127.0.0.1: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'); }
键入https://127.0.0.1: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 事件。