У меня есть мой метод правила, как это:Сравните правило yii2 не работает правильно
public function rules()
{
return [
[['username', 'email', 'password'],'filter', 'filter' => 'trim'],
[['username', 'email', 'password'],'required', 'message' => '{attribute} can not be empty'],
['username', 'string', 'min' => 2, 'max' => 255],
['password', 'string', 'min' => 6, 'max' => 255],
['password_repeat', 'required', 'message' => 'This field can not be empty'],
['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match", 'skipOnError' => true],
['username', 'unique',
'targetClass' => User::className(),
'message' => 'This name is already used.'],
['email', 'email'],
['email', 'unique',
'targetClass' => User::className(),
'message' => 'This name is already used.'],
];
}
И мой взгляд код выглядит так:
<?php $form = ActiveForm::begin(['action' => 'login/register']); ?>
<?= $form->field($registration, 'username',
['template' => '<div class="uk-form-row">
{input}{error}
</div>'])
->textInput(['id' => 'register_username', 'class' => 'md-input']) ?>
<?= $form->field($registration, 'password',
['template' => '<div class="uk-form-row">
{input}{error}
</div>'])
->passwordInput(['id' => 'register_password', 'class' => 'md-input']) ?>
<?= $form->field($registration, 'password_repeat',
['template' => '<div class="uk-form-row">
{input}{error}
</div>'])
->passwordInput(['id' => 'register_password_repeat', 'class' => 'md-input']) ?>
<?= $form->field($registration, 'email',
['template' => '<div class="uk-form-row">
{input}{error}
</div>'])
->textInput(['id' => 'register_email', 'class' => 'md-input']) ?>
<div class="uk-margin-medium-top">
<button class="md-btn md-btn-primary md-btn-block md-btn-large">Sign in</button>
</div>
<?php ActiveForm::end(); ?>
Когда я заполняю все данные поля ввода имеют ошибку Passwords don't match
при повторном пароле, даже если это правильно в первый раз. Есть ли что-то с моими правилами проверки или это ошибка в Yii Validator?
UPD: Я пробовал 'skipOnError' => true
. Я нашел это ответом на аналогичный вопрос, но он все еще не работает, как и ожидалось.
UPD: Я сделал некоторые проверки в моей консоли:
var a = $('#register_password')
undefined
a.val()
"Halloha"
var b = $('#register_password_repeat')
undefined
b.val()
"Halloha"
Но он по-прежнему показывает сообщение Passwords don't match
ошибки
ли что-то происходит с ними в 'beforeValidate()'? Также, если у вас нет этого, добавьте это действие и «var_dump» оба атрибута модели, чтобы увидеть, действительно ли они не совпадают. В Yii2 нет ошибки в проверке, это что-то еще. – peaceman
@peaceman Я не создавал метод 'beforeValidate()'. Хорошо, но как я могу получить значения «vad_dump», если они не были отправлены на бэкэнд (кнопка «Отправить» ничего не делает). –