我用教程编写了这段代码:
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
:的两种方法
- getName()//获取用户名
- 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
要获得id
、name
,可以使用:
$id=Yii::app()->user->id;
$name=Yii::app()->user->name;
在您的情况下,yii似乎正在用电子邮件覆盖name
。