Ответ 1
В моем случае я просто изменил проверку пароля:
['password','compare'],
:
['password_repeat', 'compare', 'compareAttribute' => 'password'],
Я набираю пароль, а затем повторяю его в поле повторного пароля, но красное предупреждение не исчезает, и когда я нажимаю кнопку "Отправить", это было успешным и не проверяло ошибки. Как сделать оповещение об ошибке исчезнуть, когда я повторил пароль?
Здесь мой код правил в модели
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(); ?>
и вот мой скриншот
В моем случае я просто изменил проверку пароля:
['password','compare'],
:
['password_repeat', 'compare', 'compareAttribute' => 'password'],
Если вы правильно поняли: вы вводите первый пароль и, когда вы меняете фокус на другое поле (password_repeat), форма уже показывает сообщение об ошибке, даже если вы даже не набрали второе поле. Если это так, вы можете отключить проверку клиента, чтобы данные были проверены только после отправки формы. Для этого вы можете добавить следующее в свою ActiveForm инициализацию (это опция):
<?php $form = ActiveForm::begin(['enableClientValidation' => false']);?>
Мне просто нужна только эта строка:
[['password_repeat'], 'compare', 'compareAttribute' => 'password', 'message' => 'Your error message']