Yii beforeAction 兼容性问题

Posted

技术标签:

【中文标题】Yii beforeAction 兼容性问题【英文标题】:Yii beforeAction compatibility issue 【发布时间】:2013-09-28 10:36:47 【问题描述】:

我今天刚开始学习 Yii,对它一无所知,所以这个问题听起来可能很愚蠢。在 yii 中测试一些演示应用程序时,我遇到了这个错误消息。

严格标准:SiteController::beforeAction() 的声明应与 C:\wamp\www\protected\controllers\SiteController.php 中的 CController::beforeAction($action) 兼容

谁能帮帮我,这是什么问题,我该如何解决。

这里是 beforeAction 函数

protected function beforeAction(CAction $action) 
    $user = Yii::app()->session->get('user');
    /* is valid user check and assign user details to $user*/
   Yii::app()->session->add('user',$user);
   if(!isset($user)) 
       //redirect(login page);
       return false;
   
   return true;

注意:我知道这不是学习新东西的正确方法,但我的时间有点短。所以请多多包涵。

【问题讨论】:

【参考方案1】:

您正在扩展从CController 继承的方法,但参数列表不匹配。请注意,错误表明CController 允许传递$action 参数。这意味着当你扩展方法时,它也应该至少有那个参数。

这不是 Yii 特定的事情,而是 PHP(具有严格标准)警告你的事情。

对于与 Yii 相关的内容,请确保使用 beforeAction($action) 方法执行以下操作之一:

protected function beforeAction($action)

    ...code...

    return parent::beforeAction($action);

protected function beforeAction($action)

    if (!parent::beforeAction($action)) 
        return false;
    

    ...code...

    return true;

您使用哪种模式取决于您放置的...code...,以及您希望在哪里短路操作(如果有的话)。请记住,您必须从此方法返回 true,除非您希望停止执行操作。

【讨论】:

谢谢,这是在扩展控制器公共函数 beforeAction(CAction $action) 中定义 beforeAction 函数的方式 @iamagent 如果您仍然收到错误,您能否编辑您的问题并显示您的beforeAction 方法的样子。另外,请确保使用protected 而不是public,因为父级是protected,这也可能导致此错误。 我已经编辑了问题并添加了 beforeAction 方法

以上是关于Yii beforeAction 兼容性问题的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 - beforeAction 期间的返回响应

yii2 beforeAction 重定向问题

YII2.0.12兼容PHP7.2版本升级

Yii2-自适应切换模板

Yii1 - 在之前的操作中清理GET参数

PHP (Yii2) 自定义业务异常类(可支持返回任意自己想要的类型数据)