//設定檔web.php加了下面一個配置'errorHandler' => [ 'errorAction' => 'test/error',],//TestController.php檔案的內容namespace app\controllers;use Yii;use yii\web\Controller;use yii\web\HttpException;class TestController extends Controller{ public function actionIndex() { throw new HttpException(409, 'adf'); } public function actionError() { echo 'a';die; }}
這樣請求index會輸出a
,但是如果我在設定檔web.php中加上下面的配置項,將響應格式改成json
'response' => [ 'format' => yii\web\Response::FORMAT_JSON, 'charset' => 'UTF-8',],
現在請求index,就不輸出a
了,這是為什嗎?
這個問題我追了一下原始碼,自己已經有答案了。是在yii\web\ErrorHandler的renderException方法中,如果響應格式是json就會走分支的最後一段,調用的是convertExceptionToArray方法,而沒走定義的errorAction方法中
回複內容:
//設定檔web.php加了下面一個配置'errorHandler' => [ 'errorAction' => 'test/error',],//TestController.php檔案的內容namespace app\controllers;use Yii;use yii\web\Controller;use yii\web\HttpException;class TestController extends Controller{ public function actionIndex() { throw new HttpException(409, 'adf'); } public function actionError() { echo 'a';die; }}
這樣請求index會輸出a
,但是如果我在設定檔web.php中加上下面的配置項,將響應格式改成json
'response' => [ 'format' => yii\web\Response::FORMAT_JSON, 'charset' => 'UTF-8',],
現在請求index,就不輸出a
了,這是為什嗎?
這個問題我追了一下原始碼,自己已經有答案了。是在yii\web\ErrorHandler的renderException方法中,如果響應格式是json就會走分支的最後一段,調用的是convertExceptionToArray方法,而沒走定義的errorAction方法中
如果要響應JSON,你要返回一個數組