2016-04-19 15 views
0

Ich möchte, dass meine App erkennt, wenn ein Benutzername bereits vergeben ist, und sie ändern. Wenn sich der Benutzer selbst registriert, gibt er seinen Vor- und Nachnamen ein und der Benutzername ist Nachname.Vorname. Wie kann ich feststellen, dass der Benutzername bereits vergeben ist und wie er geändert wird (z. B. eine Nummer hinzufügen)?Yii2 Benutzernamen bei der Erstellung ändern

Danke.

+0

So werden Sie automatisch Bereitstellung von Benutzernamen? –

+0

Ja, das ist richtig, der Benutzer gibt seinen Nachnamen und seinen Vornamen ein und der Benutzername wird von der App vergeben. –

+0

Könnten Sie auch den Code teilen, in dem App den Benutzernamen bestimmt. –

Antwort

1

So sollten Sie beforeValidate() Funktion außer Kraft setzen, unten ist mein Beispielcode:

/** 
* @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

Vielen Dank, aber ich dachte, die Validierung wurde in SignupForm Modell gemacht? static :: findOne() ist im Benutzermodell richtig? –

+1

Ok vielen Dank es funktioniert :) –

+0

Korrigieren Sie, fügen Sie dies in der Benutzermodelldatei, die von ActiveRecord –

0

Was ist das Benutzermodul, das Sie verwenden? Ist es dektrium/yii2-user Modul?

Wir können die Benutzermodellklasse überschreiben und die Funktion beforeValidate überschreiben, um den Benutzernamen vor dem Speichern zu erkennen und zu ändern.

+0

Nicht ich benutze das Benutzer-Basismodell, das Komponente in Anbieter erweitert/yiisoft/yii2/web/User –

+0

Also sollten Sie 'beforeValidate'-Funktion überschreiben. –

+0

Ok, ich überschreibe die beforeValidate Methode, aber wie kann ich feststellen, dass der Benutzername bereits vergeben ist? –