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