Задать вопрос

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

Вход пользователя на сайт должен осуществляться или по имэйлу или по номеру телефона, на странице входа в форме есть одно поле в которое пользователь может написать или свою почту или телефон.
Как надо составить правило проверки модели этой формы, сделал
['username', 'exist',
'targetClass'=>'\app\models\User',
'targetAttribute' => ['email', 'phone'],
'message'=>'Пользователь не найден.'
],
Но это правило как я понял проверяет наличие значения в обоих полях таблицы, а мне надо чтобы было совпадение или в email или в phone.
Есть такое правило или я что не так сделал?
  • Вопрос задан
  • 385 просмотров
Подписаться 1 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 Автор вопроса
Проблему решил, примерно так и сделал. Благодарю.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽