【发布时间】:2016-04-08 13:53:01
【问题描述】:
我有这样的规则方法:
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 我没有创建
beforeValidate()方法。好的,但是如果vad_dump值没有发送到后端,我怎么能(提交按钮不做任何事情)。
标签: php validation yii yii2 client-side-validation