我已经阅读了关于如何创建CWebUser的子类的教程,并按照说明操作。这些路径都可以工作,并且代码正在进入正确的方法,但是从我的getter返回的值始终为零。Yii扩展用户似乎没有保留额外的实例变量
class PersonUser extends CWebUser {
// Store model to not repeat query.
private $_person;
// Load user model.
public function loadPerson($id=null, $duration=0)
{
$this->login($id,$duration);
$this->_person=Person::model()->findByPk(Yii::app()->user->id);
}
public function getPerson()
{
return $this->_person;
//return Person::model()->findByPk($this->id);
}
}
如果我在loadPerson方法$this->_person->first_name
呼应我设置_person
后,我得到我所期望的价值。但是,在任何稍后的时间,如果我要求Yii::app()->user->person
,则会调用getPerson()
方法,但$this->_person
现在为空。我知道它进入那里,如果我取消注释下面的行,并让它每次都查看这个人,它就会起作用。
这是Yii的问题吗?我真的希望能够缓存person对象,这样我就可以在整个会话中引用它,而无需对数据库进行更多的调用。我在想什么?