2015-05-24 20:53:52 21780次浏览 2条回答 1 悬赏 0 金钱

我写了个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' 

求解答

最佳答案

  • chocoboxxf 发布于 2015-05-25 23:19 举报

    beforeAction返回的应该是true或者false,要直接输出的话,应该还是返回false,通过response指定输出的内容,类似这样

    Yii::$app->response->format = Response::FORMAT_JSON;
    Yii::$app->response->data = array(
        'status' => -1,
        'message' => '请先登录',
        'url' => \Yii::$app->getHomeUrl()
    );
    return false;
    
    1 条回复
    回复于 2015-05-26 13:42 回复

    谢谢,已经解决

    觉得很赞
  • 回答于 2015-05-25 07:41 举报

    试试将Response::FORMAT_JSON换成'json',如果OK的话,说明CommonController没有这条语句:use yii\web\Response;

您需要登录后才可以回答。登录 | 立即注册
den1986
见习主管

den1986

注册时间:2015-05-10
最后登录:2017-08-04
在线时长:4小时12分
  • 粉丝8
  • 金钱75
  • 威望15
  • 积分265

热门问题