2016-04-19 10 views
0

ユーザ名がすでに取得されているときにアプリが検出して変更したい。実際に、ユーザが自分自身を登録すると、彼は自分の名字を入力し、ユーザ名はlastName.firstNameです。ユーザー名はすでに取得済みで、変更する方法を検出するにはどうすればよいですか?Yii2作成時にユーザ名を変更する

ありがとうございました。

+0

ですから、自動的にユーザー名を提供していますか? –

+0

はい、そうです。ユーザーは姓と名を入力し、ユーザー名はアプリから与えられます。 –

+0

アプリがユーザー名を決定するコードを共有することもできますか? –

答えて

1

あなたがbeforeValidate()関数をオーバーライドする必要がありますので、ベローズは、私のサンプルコードです:

/** 
* @inheritdoc 
*/ 
public function beforeValidate() 
{ 
    /** your code here **/ 

    $isExist = static::find()->where(['username' => $this->username])->count(); 

    if($isExist){ 
     //Count total rows with the similar username 
     $total = static::find()->where(['LIKE','username', "{$this->username}%"])->count(); 
     //We will add $total + 1 to the username so we have new unique username 
     $this->username .= '-' . ($total+1); 
    } 

    return parent::beforeValidate(); 
} 
+0

ありがとうございますが、検証はSignupFormモデルで行われたと思いますか? static :: findOne()はユーザーモデルの権利ですか? –

+1

ありがとうありがとうございます:) –

+0

これをActiveRecordから拡張されたUserモデルファイルに追加してください –

0

使用するユーザモジュールとは何ですか?それはdektrium/yii2-userモジュールですか?

保存する前にユーザーモデルクラスをオーバーライドし、beforeValidate関数をオーバーライドしてユーザー名を検出して変更することができます。

+0

ベンダー/ yiisoft/yii2/web/User –

+0

でComponentを拡張するユーザー基本モデルを使用していないので、 'beforeValidate'関数をオーバーライドする必要があります。 –

+0

私はbeforeValidateメソッドをオーバーライドしましたが、どのようにユーザー名を検出できますか? –

関連する問題