Подтвердить что ты не робот

Yii2 Сравнение предупреждения валидатора не исчезает

Я набираю пароль, а затем повторяю его в поле повторного пароля, но красное предупреждение не исчезает, и когда я нажимаю кнопку "Отправить", это было успешным и не проверяло ошибки. Как сделать оповещение об ошибке исчезнуть, когда я повторил пароль?

Здесь мой код правил в модели

public function rules()
{
    return [
        ['username', 'filter', 'filter' => 'trim'],
        ['username', 'required'],
        ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'],
        ['username', 'string', 'min' => 2, 'max' => 255],

        ['email', 'filter', 'filter' => 'trim'],
        ['email', 'required'],
        ['email', 'email'],
        ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'],

        ['password', 'required'],
        ['password','compare'],
        ['password', 'string', 'min' => 6],
        ['password_repeat','safe']

    ];
}

и моя форма

<?php $form = ActiveForm::begin(); ?>

<h3>Your Account</h3>
<?= $form->field($modelUser, 'username')->textInput(['maxlength' => 45, 'class' => 'input-xlarge form-control']) ?>

<?= $form->field($modelUser, 'password')->passwordInput(['class' => 'form-control input-xlarge']) ?>

<?= $form->field($modelUser, 'password_repeat')->passwordInput(['class' => 'form-control input-xlarge']) ?>
<button class="btn btn-primary" type="submit">Continue</button>

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

и вот мой скриншот yii2 compare validation

4b9b3361

Ответ 1

В моем случае я просто изменил проверку пароля:

['password','compare'],

:

['password_repeat', 'compare', 'compareAttribute' => 'password'],

Ответ 2

Если вы правильно поняли: вы вводите первый пароль и, когда вы меняете фокус на другое поле (password_repeat), форма уже показывает сообщение об ошибке, даже если вы даже не набрали второе поле. Если это так, вы можете отключить проверку клиента, чтобы данные были проверены только после отправки формы. Для этого вы можете добавить следующее в свою ActiveForm инициализацию (это опция):

<?php $form = ActiveForm::begin(['enableClientValidation' => false']);?>

Ответ 3

Мне просто нужна только эта строка:

[['password_repeat'], 'compare', 'compareAttribute' => 'password', 'message' => 'Your error message']