类UserIdentity不返回Yii中的属性

时间:2014-11-04 16:43:25

标签: php yii

我用一个教程制作了这段代码:

class UserIdentity extends CUserIdentity
{
    private $_id;
    private $_email;

    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->_email=$user->email;
            $this->errorCode=self::ERROR_NONE;
        }
        return !$this->errorCode;
    }

    public function getId()
    {
        return $this->_id;
    }
}

我尝试保存该用户的ID,但它没有返回ID,它返回电子邮件,并且在调用它时没有定义电子邮件:

echo Yii::app()->user->email;

请帮帮我!我是Yii的新手!

1 个答案:

答案 0 :(得分:1)

您可以覆盖CUserIdentity的两种方法:

  1. getName()//获取用户名
  2. getId()//获取用户ID
  3. 所以默认情况下你会有两个属性:

    private $_name;
    private $_id;
    

    你需要覆盖提到的方法:

    public function getId() {
        return $this->_id;
    }
    
    public function getName() {
        return $this->_name;
    }
    

    并且

    $this->_id=$user->id;
    $this->name=$user->username;
    

    如果您想保存其他用户信息,例如电子邮件,则可以使用setState(),例如:

    $this->_id=$user->id;
    $this->name=$user->username;
    $this->setState('email', $user->email);
    

    然后在您的项目中使用它,如下所示:

    Yii::app()->user->getState('email'); //will return stored email in session
    

    要获得idname,您可以使用:

    $id=Yii::app()->user->id;
    $name=Yii::app()->user->name;
    

    在你的情况下,看来,yii正在用电子邮件覆盖name