合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
[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组件了