Уникальный валидатор электронной почты yii2 не возвращает проверку сообщения

Я пытаюсь использовать уникальный валидатор для электронной почты в моей модели, но он не работает. Я имею в виду отсутствие уведомления, которое отображается в форме, когда пользователь вводит то же электронное письмо, которое уже сохранено в БД, и пользователь все еще может нажать кнопку отправки (и страницу перезагружен), хотя данные не сохраняются в БД. Что не так с моим кодом?

это проверка моей модели:

['email', 'trim'],
['email', 'required'],
['email', 'email'],
['email', 'string', 'max' => 255],
['email', 'unique', 'targetClass' => '\application\common\models\User', 'message' => 'This email address has been taken.'],

это моя форма:

<?php $form = ActiveForm::begin(['id' => 'form-signup']); ?>

<?= $form->field($model,'email')->textInput()->input('email', ['placeholder' => "Email"])->label(false) ?>

...

<div class="form-group">
<?= Html::submitButton('SIGN UP NOW', ['class' => 'btn btn-sign', 'type' => 'submit']) ?>
</div>

<?php ActiveForm::end(); ?>

и это моя модель для сохранения процесса:

if (!$this->validate()) {
     return null;
}

$user = new User();

$user->email = $this->email;
...


person bch21378    schedule 24.11.2020    source источник


Ответы (1)


вы должны добавить фильтр в проверку вашей модели.

['email', 'filter', 'filter' => 'trim'],
['email', 'required'],
['email', 'email'],
['email', 'unique',
          'targetClass' => '\common\models\User',
           'message' => Yii::t('frontend', 'This email address has already been taken.')
        ],
person BukhariBaBa    schedule 24.11.2020