类UserIdentity未在Yii中返回属性


Class UserIdentity not returning properties in 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的新手!

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

  1. getName()//获取用户名
  2. getId()//获取用户id

因此,默认情况下有两个属性:

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