2013-09-28 143 views
1

我刚开始学习Yii,不知道任何东西,所以这个问题可能听起来很愚蠢。在yii中测试一些演示应用时,我遇到了这个错误消息。Yii beforeAction兼容性问题

严格的标准:SiteController :: beforeAction的声明()应该与CController兼容:: beforeAction($行动)在C:\ WAMP \ WWW \保护\ \控制器SiteController.php

谁能帮助我,这里有什么问题,我如何解决这个问题。

这里是控制器的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; 
} 

注:我KNW这不是学习新的东西,但即时通讯的时间有点短的正确方法。所以请耐心等待。

回答

2

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

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

的东西是Yii的关系,确保你与你的beforeAction($action)方法执行下列操作之一:

protected function beforeAction($action) 
{ 
    ...code... 

    return parent::beforeAction($action); 
} 

OR

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

    ...code... 

    return true; 
} 

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

+0

感谢,这是控制器的beforeAction功能是如何在扩展控制器定义 公共职能beforeAction(CAction $行动) – iamlucifer

+0

@iamagent如果您仍然收到错误,您可以编辑你的问题,显示你什么'beforeAction'方法看起来像。此外,请确保您使用'protected'而不是'public',因为父项是'protected',并且可能会导致此错误。 –

+0

我编辑了问题并添加了beforeAction方法 – iamlucifer