Избегайте ошибки «Имя пользователя уже существует» при проверке имени пользователя при обновлении формы в yii2 - PullRequest
0 голосов
/ 10 января 2019

У меня есть форма для создания пользователя, и я проверю существующее имя пользователя в одном из наших API, и я создаю правило с настраиваемой функцией проверки и она работает нормально. Но при обновлении формы пользовательская функция также запускается и отображает ошибку «Имя пользователя уже существует» с моим именем пользователя.

Мои правила

public function rules()
{
    return [
        ['username', 'trim'],
        ['username', 'uniqueUsers'], // Find username already exists
    ]
}

Моя пользовательская функция проверки,

public function uniqueUsers($attributes, $params) 
{
    $getUser = Yii::$app->params['user']."?username=".$this->username;
    $validUsername = BaseModel::getDetails($getUser);
    $getUserValue = isset($validUsername['display']) ? $validUsername['display'] : '';
    if($getUserValue!='') {
        // echo "$attributes/";
        $this->addError($attributes, 'Username Already Exists');
    }
}

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

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Вы можете сделать это с помощью сценария;

['username', 'uniqueUsers', 'on'=>'create']

или проверка модели новой.

public function uniqueUsers($attributes, $params) 
{
    if ($this->isNewRecord){
        // Your validation controls
    }
}
0 голосов
/ 10 января 2019

Вы можете использовать это тоже

['username', 'unique', 'when' => function($model) {
                            return $model->isAttributeChanged('username');
                        }],

или ознакомьтесь с предложениями @Hakeem Nofal

0 голосов
/ 10 января 2019

проверить собственный уникальный валидатор yii2

https://www.yiiframework.com/doc/api/2.0/yii-validators-uniquevalidator

// a1 needs to be unique
['a1', 'unique']

// a1 needs to be unique, but column a2 will be used to check the uniqueness of the a1 value
['a1', 'unique', 'targetAttribute' => 'a2']
// a1 and a2 need to be unique together, and they both will receive error message
[['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']]
// a1 and a2 need to be unique together, only a1 will receive error message
['a1', 'unique', 'targetAttribute' => ['a1', 'a2']]
// a1 needs to be unique by checking the uniqueness of both a2 and a3 (using a1 value)
['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']]

для вашего случая это может выглядеть как

['username', 'unique', 'message' => Yii:t('app','Username Already exists')]
...