我正在开发一个项目,它在实时服务器和本地工作正常。但是当我把它上传到另一台服务器上时,它给了我错误 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;
}
}
答案 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;
}
}