0

我看到了几个(几乎等价的)关于如何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$thisCUserIdentity,而CWebUserYii::app()->userCWebUser,默认情况下CWebUser没有任何对CUserIdentity的引用。

它们都确实支持通过 存储附加属性setState并通过 检索它们getState,但首先使用内部_state数组,第二个使用$_SESSION.

所以问题是 - 我们如何将扩展信息写入一个实体,然后从另一个实体中读取?我在 Yii 代码中看不到任何可以提供此功能的东西。它看起来像示例中的错误。

4

1 回答 1

1

当您调用登录方法时, Yii::app()->user->login()您必须传递一个 useridentity 对象,这基本上意味着 CWebuser 确实具有对 useridentity 的引用

Yii::app()->user->login($userIdentity,$duration);
于 2013-01-08T18:12:56.430 回答