0

免责声明:完全的 Yii 初学者,一些 php 经验。
在 Yii 中,是否可以覆盖loginCWebUser 的方法?
我想这样做的原因是因为源代码中的注释指出该changeIdentity方法可以被子类覆盖,但是因为我想向该方法发送更多参数,所以我也在考虑覆盖该login方法(CWebUser)。
另外,如果这不是一个好主意,您如何将额外的参数发送到changeIdentity方法中。(通过以某种方式从参数中检索它$states??)。额外的参数是 UserIdentity 类的新定义的属性。

4

1 回答 1

1

components/UserIdentity.php最好先尝试通过覆盖的身份验证方法来做您想做的事情。事实上,这对于实现比默认演示和管理员登录更高级的任何安全系统都是必要的。

在该方法中,您可以使用

$this->setState('myVar', 5);

然后像这样在网络应用程序的任何地方访问它:

Yii::app()->user->getState('myVar');

如果myVar未定义,该方法将null默认返回。否则它将返回它存储的任何内容,在我的示例中为 5。这些值存储在 $_SESSION 变量中,因此只要会话存在,它们就会持续存在。

更新:好的,花时间了解这整个混乱如何在 Yii 中工作以获得另一个答案,所以我也在这里分享我的发现。下面主要是从我刚刚在别处给出的类似答案中复制粘贴的。这被测试为在我的系统上从一个页面到另一个页面的工作和持久性。

您需要扩展 CWebUser 类以实现您想要的结果。

class WebUser extends CWebUser{
    protected $_myVar = 'myvar_default';

    public function getMyVar(){
        $myVar = Yii::app()->user->getState('myVar');
        return (null!==$myVar)?$myVar:$this->_myVar;
    }

    public function setMyVar($value){
        Yii::app()->user->setState('myVar', $value);
    }
}

然后,您可以myVar使用 分配和调用属性Yii::app()->user->myVar

将上面的类放在components/WebUser.php,或者任何它将被加载或自动加载的地方。

更改您的配置文件以使用您的新 WebUser 类,您应该已准备就绪。

'components'=>
    'user'=>array(
        'class'=>'WebUser',
    ),
...
),
于 2012-12-01T19:35:41.170 回答