我看到了几个(几乎等价的)关于如何Yii::app()->user
在 Yii 中扩展信息的示例。这是其中之一。
代码(原样):
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$user=User::model()->findByAttributes(array('username'=>$this->username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if($user->password!==md5($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id;
$this->setState('lastLoginTime', $user->lastLoginTime); // added property
$this->errorCode=self::ERROR_NONE;
}
return !$this->errorCode;
}
public function getId()
{
return $this->_id;
}
}
可以肯定的是,之后我们可以lastLoginTime
按如下方式访问这些值:
Yii::app()->user->lastLoginTime
这里的问题是我们调用setState
的$this
是CUserIdentity,而CWebUserYii::app()->user
是CWebUser,默认情况下CWebUser没有任何对CUserIdentity的引用。
它们都确实支持通过 存储附加属性setState
并通过 检索它们getState
,但首先使用内部_state
数组,第二个使用$_SESSION
.
所以问题是 - 我们如何将扩展信息写入一个实体,然后从另一个实体中读取?我在 Yii 代码中看不到任何可以提供此功能的东西。它看起来像示例中的错误。