2014-03-03 20 views
1

我是我網站的管理員。當我註冊新用戶時,我想將我的用戶名添加到新用戶名。如:如何在yii中添加一些字給用戶名?

我的用戶名:經理
新的用戶名:測試
結果:manager_test

我想驗證結果。我用beforevalidate(),並添加自己的用戶名是:

protected function beforeValidate() 
{ 
    $this->username = Yii::app()->user->name.'_'.$this->username; 
    return parent::beforeValidate(); 
} 

但一些存儲到數據庫是:manager_manager_manager_test。其實我的程序在3次驗證之前調用。

我該怎麼辦?我想在beforevalidate函數之前讀一次。

回答

0

您可以在創建並使用「beforesave」進行檢查時檢查是否有新記錄添加前綴。

public function beforeSave(){ 
    parent::beforeSave(); 
    if($this->isNewRecord()) 
     $this->username = Yii::app()->user->name.'_'.$this->username; 
    return true; 
} 
+0

感謝您的回答。我用你的建議,但我有一個問題。當我整個重複的用戶名,我無法處理我的錯誤,我看到apge與下面的錯誤: 'CDbException CDbCommandدراجرایSQL語句:SQLSTATE [23000]:完整性約束違規:1062重複條目'demo_ITC3'for關鍵'用戶名'。' –

+1

您可以指定自定義驗證。添加模型函數: public function checkUsername($ attribute,$ params) {userModel = User :: model() - > find('username =:username',array(':username'=> Yii: :應用程序() - >用戶>名稱.'_」 $這個 - >用戶名))。 if(!is_null($ userModel)){this-> addError(屬性,「同名用戶存在」); } } 並在規則數組中添加此規則: array('username','checkUsername'), – Goodnickoff

+0

非常感謝。它正常工作:) –

0
if(end(explode('_',Yii::app()->user->name)) != $this->username){ 
    $this->username = Yii::app()->user->name.'_'.$this->username; 
} 
return parent::beforeValidate(); 
0

爲什麼不直接在保存之前做?驗證你知道你正在添加的東西有什麼意義,只需讓我們驗證一下,然後在beforeSave中添加你想要的東西。

相關問題