[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斷點調試