每当我将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)
答案 0 :(得分:2)
请参阅此错误消息:
should be compatible with yii\web\Controller::beforeAction($action)
您的覆盖功能必须与父级兼容。所以,有效的代码:
public function beforeAction($action)
{
....
}
答案 1 :(得分:1)
只是解释
如果遇到此问题,则表示您的父类中有一个函数,而子类中的函数具有相同的名称但输入变量声明不同。
父类
beforeAction($action) {
....
}
儿童班
beforeAction() {
....
}
如您所见,子类缺少$ action变量。这会在PHP E_Strict中创建一个警告。您所要做的就是确保子类函数与父类完全相同。