2014-11-04 46 views
0

我做了這個代碼教程:類的UserIdentity不返回性能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,它返回emailadres,和當調用它時,電子郵件沒有定義:

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

請幫幫我!我新來Yii!

+0

所以當使用'Yii :: app() - > user-> id'時,你會收到電子郵件地址?它是否正確?當調用'Yii :: app() - > user-> email'時,你會得到未定義的或空白的結果? – 2014-11-04 16:46:43

+0

@TheHumbleRat是的,這是真的。奇怪是不是? – Refilon 2014-11-04 20:06:58

回答

1

您可以覆蓋的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與電子郵件。

+0

感謝隊友,工作!還有一個問題,這個存儲是否足以保存那裏的用戶記錄?除了密碼,這從來都不聰明。 – Refilon 2014-11-04 20:14:42

+0

@ Deer-Outdoor.nl加載模型時,如果您調用模型,則會進行保存。 – 2014-11-04 20:46:32

+0

不客氣親愛的;) – 2014-11-04 20:48:27