beforeAction()应该与yii \ web \ Controller :: beforeAction($ action)兼容

时间:2017-04-22 13:27:32

标签: php yii yii2

我正在开发一个项目,它在实时服务器和本地工作正常。但是当我把它上传到另一台服务器上时,它给了我错误 beforeAction()应该与yii \ web \ Controller :: beforeAction($ action)兼容。

我在服务器上设置了所有需要的东西。

但是当我在新服务器上登录我的项目时,它给我空白页面没有错误。当我访问内页(登录后的页面)时,它给了我错误 beforeAction()应该与yii \ web \ Controller :: beforeAction($ action)兼容。

我无法理解实际问题,我会仔细阅读此错误给出的所有相关答案,但我无法找到确切的答案。

这是我的beforeAction函数

public function beforeAction() {

    if (\Yii::$app->getUser()->isGuest) {
        $this->redirect(Yii::$app->urlManager->createAbsoluteUrl('auth/login'));
        return false;
    } else {
        return true;
    }
}

3 个答案:

答案 0 :(得分:2)

当您覆盖方法时,您需要使用相同的签名。添加$action参数。在*种方法之前首先检查父母的结果是个好习惯:

public function beforeAction($action)
{
    if (parent::beforeAction($action)) {
        if (\Yii::$app->getUser()->isGuest) {
            $this->redirect(Yii::$app->urlManager->createAbsoluteUrl('auth/login'));
            return false;
        }
            return true;
    }
    return false;
}

最后一件事 - 最好使用access filter

答案 1 :(得分:0)

试试这个:

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

在beforeAction方法中传递$ action

答案 2 :(得分:0)

您错过了根据\ yii \ base \ Controller中的定义所需的参数。

试试这个。

public function beforeAction($action)
{
    parent::beforeAction($action);

    if (\Yii::$app->getUser()->isGuest)
    {
        $this->redirect(Yii::$app->urlManager->createAbsoluteUrl('auth/login'));
        return false;
    } else
    {
        return true;
    }
}