2016-04-19 6 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

Спасибо, но я думал, что проверка была сделана в модели RegistrationForm? static :: findOne() действительно в пользовательской модели? –

+1

Хорошо, спасибо, что это работает :) –

+0

Исправьте, добавьте это в файл модели пользователя, который простирается от ActiveRecord –

0

Какой пользовательский модуль вы используете? Это модуль dektrium/yii2-user?

Мы можем переопределить класс модели пользователя и переопределить функцию beforeValidate для обнаружения и изменения имени пользователя перед сохранением.

+0

Не я использую базовую модель пользователя, которая расширяет компонент в поставщике/yiisoft/yii2/web/User –

+0

Поэтому вы должны переопределить функцию 'beforeValidate'. –

+0

Хорошо, я переопределяю метод beforeValidate, но как я могу определить, что имя пользователя уже принято? –