我看到了几个(几乎相当的)关于如何在Yii中扩展Yii::app()->user
信息的例子。这是one of them。
代码(原样):
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 ,而Yii::app()->user
是 CWebUser , CWebUser 默认情况下没有任何对 CUserIdentity 的引用。
它们都确实支持通过setState
存储其他属性并通过getState
检索它们,但首先使用内部_state
数组,第二个写入{{1} }}
所以问题是 - 我们如何将扩展信息写入一个实体,然后从另一个实体读取?我没有在Yii代码中看到任何可以提供此功能的内容。在示例中看起来像是一个错误。
答案 0 :(得分:1)
当您调用Yii::app()->user->login()
的登录方法时,您必须传递一个useridentity对象,这意味着CWebuser确实引用了useridentity
Yii::app()->user->login($userIdentity,$duration);