Какое правило валидации есть в yii 2 для валидации двух полей, чтобы искались совпадения или в первом иливтором поле по одному атрибуту?

Вход пользователя на сайт должен осуществляться или по имэйлу или по номеру телефона, на странице входа в форме есть одно поле в которое пользователь может написать или свою почту или телефон.
Как надо составить правило проверки модели этой формы, сделал
['username', 'exist',
'targetClass'=>'\app\models\User',
'targetAttribute' => ['email', 'phone'],
'message'=>'Пользователь не найден.'
],
Но это правило как я понял проверяет наличие значения в обоих полях таблицы, а мне надо чтобы было совпадение или в email или в phone.
Есть такое правило или я что не так сделал?
  • Вопрос задан
  • 381 просмотр
Решения вопроса 1
vakorovin
@vakorovin
Разработчик
С exist пока работать не приходилось - ни в одном проекте не было в нём нужды. По большому счету можно написать свой валидатор в используемой модели, что-то в духе:

public function validateUsername($attribute, $params)
    {
        if (!$this->hasErrors()) {
            if (($user = User::find()->where("phone = :username OR email LIKE :username", ['username'=>$this->$attribute])->one()) === null) {
                $this->addError($attribute, 'User not found');
            }
        }
    }

и добавить это правило в rules:

public function rules()
    {
        return [
            ...
            ['username', 'validateUsername'],
            ...
        ];
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@RybinDen Автор вопроса
Проблему решил, примерно так и сделал. Благодарю.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы