Yii 是否通过覆盖将更多数据发送到CWebUser中的changeIdentity?
免责声明:Yii完全是初学者,有一些php经验。Yii 是否通过覆盖将更多数据发送到CWebUser中的changeIdentity?,yii,Yii,免责声明:Yii完全是初学者,有一些php经验。 在Yii中,是否可以覆盖CWebUser的登录方法? 我之所以要这样做,是因为源代码中的注释指出,changeIdentity方法可以被子类覆盖,但因为我想向该方法发送更多参数,我也在考虑覆盖login方法(对于CWebUser)。 另外,如果这不是一个好主意,那么如何将额外的参数发送到changeIdentity方法中(以某种方式从$states参数中检索)。额外的参数是UserIdentity类的新定义属性。最好先尝试通过重写组件/UserI
在Yii中,是否可以覆盖CWebUser的
登录
方法?我之所以要这样做,是因为源代码中的注释指出,
changeIdentity
方法可以被子类覆盖,但因为我想向该方法发送更多参数,我也在考虑覆盖login
方法(对于CWebUser)。另外,如果这不是一个好主意,那么如何将额外的参数发送到
changeIdentity
方法中(以某种方式从$states
参数中检索)。额外的参数是UserIdentity类的新定义属性。最好先尝试通过重写组件/UserIdentity.php
的身份验证方法来执行您希望执行的操作。事实上,这对于实现任何比默认演示和管理登录更高级的安全系统都是必要的
在该方法中,您可以使用
$this->setState('myVar',5)代码>
然后访问web应用程序中的任意位置,如下所示:
Yii::app()->user->getState('myVar')代码>
如果未定义myVar
,则默认情况下该方法将返回null
。否则,它将返回它存储为的内容,在我的示例中为5。这些值存储在$\u 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);
}
}
然后,您可以使用Yii::app()->user->myVar
分配和调用myVar
属性
将上述类放置在components/WebUser.php
中,或将其加载或自动加载的任何位置
更改您的配置文件以使用新的WebUser类,您应该已经全部设置好了
'components'=>
'user'=>array(
'class'=>'WebUser',
),
...
),
谢谢,但我希望有一个更优雅的方式来做。类似于以Yii::app()->user->myVar的形式访问它,并且在登录之前它有一个默认值。@ppsreejith刚刚更新了我的答案,看看这是否能满足您的需要。太好了!,正是我想要的!!