我用一个教程制作了这段代码:
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的新手!
答案 0 :(得分:1)
您可以覆盖CUserIdentity
的两种方法:
所以默认情况下你会有两个属性:
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
。