Yii2声明beforeAction应与Controller兼容

时间:2016-03-18 00:17:33

标签: php yii2

每当我将beforeAction函数事件包含在简单的内容中时,我会收到错误消息,说它必须兼容。这种情况不会发生在我的本地服务器上。我能想到的唯一区别是我的本地服务器正在运行PHP7而我的正常服务器正在运行PHP5.6。是什么导致了这个问题?我发现的唯一能解决它的是完全删除它。

这就是我beforeAction的样子

 public function beforeAction()
    { 
        if(Yii::$app->user->isGuest){
            return $this->redirect(['site/login']);
        } else {
            if(strtotime(UserInfo::findOne(Yii::$app->user->Id)->active_until) < strtotime(date("Y-m-d H:i:s"))){
                Yii::$app->session->setFlash('warning', 'You need an active subscription to access events.');
                echo("<script>location.href = '".Url::toRoute('site/subscription')."';</script>");
                exit;
                //return $this->redirect(['site/subscription']);
            }else {
                return true;
            }
        }
    }

我也尝试过这个简单的检查并得到同样的问题

public function beforeAction()
    {
        if (!parent::beforeAction($action)) {
            return false;
        }
        return true;
    }

以下是我收到的错误消息

Declaration of frontend\controllers\EventController::beforeAction() should be compatible with yii\web\Controller::beforeAction($action)

2 个答案:

答案 0 :(得分:2)

请参阅此错误消息:

should be compatible with yii\web\Controller::beforeAction($action)

您的覆盖功能必须与父级兼容。所以,有效的代码:

public function beforeAction($action)
    { 
        ....
    }

答案 1 :(得分:1)

只是解释

如果遇到此问题,则表示您的父类中有一个函数,而子类中的函数具有相同的名称但输入变量声明不同。

父类

beforeAction($action) {
....
}

儿童班

beforeAction() {
....
}

如您所见,子类缺少$ action变量。这会在PHP E_Strict中创建一个警告。您所要做的就是确保子类函数与父类完全相同。