我写了个CommonController,其他Controller都继承这个类。
我在CommonController里写了输出JSON的方法
public function renderJson($params = array()) {
Yii::$app->response->format = Response::FORMAT_JSON;
return $params;
}
在CommonController的beforeAction写了验证
$isAjax = Yii::$app->request->getIsAjax();
//未登录
if (\Yii::$app->user->isGuest) {
if ($isAjax) {
return $this->renderJson(array(
'status' => -1,
'message' => '请先登录',
'url' => Yii::$app->getHomeUrl()
));
} else {
return $this->goHome();
}
}else{
return parent::beforeAction($action);
}
这样,如果不是ajax请求就没问题,会跳到登录 ,但是如果是ajax请求。就会出错
PHP Notice 'yii\base\ErrorException' with message 'Trying to get property of non-object'
求解答
beforeAction返回的应该是true或者false,要直接输出的话,应该还是返回false,通过response指定输出的内容,类似这样
试试将Response::FORMAT_JSON
换成'json'
,如果OK的话,说明CommonController没有这条语句:use yii\web\Response;