我已經閱讀了關於如何創建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對象,這樣我就可以在整個會話中引用它,而無需對數據庫進行更多的調用。我在想什麼?