[TOC]
`response`组件就是响应组件了
## 输出字符串
控制器除了可以返回数据给框架来让框架统一输出以外,还可以设置response组件的数据来实现输出:
~~~php
public function actionTest(){
Yii::$app->response->data = 'Hello world!';
}
~~~
这样就会输出'Hello world!'
其实你还可以执行send方法马上发送
~~~php
public function actionTest(){
Yii::$app->response->data;
if(!Yii::$app->response->isSent){
Yii::$app->response->send();
echo Yii::$app->response->isSent; //true
}
}
~~~
默认情况下如果你不send,控制器执行结束后,框架底层会执行send,通常大家都懒得send
* * *
## 输出JSON
~~~php
public function actionTest(){
Yii::$app->response->data = pathinfo('/a/b/c.jpg');
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
}
~~~
两个要点:
1. data设置为可以被json\_encode的数字(一个字符串也能json\_encode)
2. format设置为**yii\\web\\Response::FORMAT\_JSON**这个常量值
format的默认值是**yii\\web\\Response::FORMAT\_HTML**
* * *
## 下载文件
~~~php
Yii::$app->response->sendFile('/a/b/c.jpg', '测试图片.jpg');
~~~
于是浏览器就会弹出下载框,提示下载一个叫“测试图片.jpg”的文件
* * *
## 操作header
~~~php
Yii::$app->response->headers->add('Content-type', 'text/plain');
Yii::$app->response->headers->add('myHeader', 'myValue');
Yii::$app->response->headers->remove('myHeader');
Yii::$app->response->data = print_r([7, 9, 3]);
~~~
## 响应状态码
这回换个花样,通过configure设置吧
~~~php
Yii::configure(Yii::$app->response, [
'statusText' => '出错啦',
'statusCode' => 501, //别占用500,这样就知道500是apache|nginx或框架底层这些出错的,501是咱自己定义的错误
]);
~~~
* 显示404报错
~~~php
throw new \yii\web\NotFoundHttpException();
~~~
底层会将这个异常转换成404报错
* * *
* 抛出以下异常有其它对应的状态码和提示
* yii\\web\\BadRequestHttpException: status code 400
* yii\\web\\ConflictHttpException: status code 409
* yii\\web\\ForbiddenHttpException: status code 403
* yii\\web\\GoneHttpException: status code 410
* yii\\web\\MethodNotAllowedHttpException: status code 405
* yii\\web\\NotAcceptableHttpException: status code 406
* yii\\web\\NotFoundHttpException: status code 404
* yii\\web\\ServerErrorHttpException: status code 500
* yii\\web\\TooManyRequestsHttpException: status code 429
* yii\\web\\UnauthorizedHttpException: status code 401
* yii\\web\\UnsupportedMediaTypeHttpException: status code 415
* * *
* 抛出自定义状态码异常,比如定义个999的状态码
~~~php
throw new \yii\web\HttpException(999);
~~~
* * *
## 重定向
~~~php
public function actionTest(){
return $this->redirect('http://www.kkh86.com');
return $this->redirect('http://www.kkh86.com', 301);
return $this->redirect('http://www.kkh86.com', 302);
return $this->redirect('/b.php');
//用response组件也可以
return Yii::$app->response->redirect('http://www.kkh86.com');
return Yii::$app->response->redirect('http://www.kkh86.com', 301);
return Yii::$app->response->redirect('http://www.kkh86.com', 302);
return Yii::$app->response->redirect('/b.php');
}
~~~
在控制器里的话直接调控制器代码最短,不过最后还是调了response来redirect,感觉这个快捷方法营养不多,我还是偏向直接用response组件的
而不在控制器里,比如模型或扩展类什么的地方重定向就要靠response组件了
- 目录
- 配置
- 简介
- 别名
- gii
- 配置项
- 模型
- 简介
- 增删改查
- AR和model
- 模型事件
- 场景
- query查询
- 增删改
- AR查询器
- 模型关系定义
- AR模型连表查询
- fields
- where拼接
- 模块
- 创建模块
- 控制器
- 表单
- 跳转
- 响应
- 验证器
- Action
- 组件
- url
- 分页
- 验证码
- 缓存
- 文件上传
- 预启动组件
- 事件
- 自定义组件
- redis
- 日志
- 行为
- cookie和session
- 基础知识
- 创建一个类
- 配置一个类
- object基类
- component组件类特性
- phpstorm无法更改php等级
- url地址美化
- 过滤器
- 请求处理
- 请求组件
- 响应组件
- header
- 用户登录
- 实现IdentityInterface接口
- 登录
- 自动检测登录
- 获取用户信息
- 访问行为追踪
- phpstorm+postman断点调试