Yii比较密码仅适用于一个字段

时间:2012-08-12 17:14:30

标签: php validation yii

我正在使用Yii内置的比较验证器来比较两个表单属性:

<div class="row ">
<?php echo $form->labelEx($model, 'newPassword', array('class'=>'control-label'));?>
<?php echo $form->passwordField($model, 'newPassword',array('class'=>'span5','maxlength'=>100)); ?>
<?php echo $form->error($model, 'newPassword'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model, 'confirmPassword', array('class'=>'control-label'));?>
<?php echo $form->passwordField($model, 'confirmPassword',array('class'=>'span5','maxlength'=>100)); ?>
<?php echo $form->error($model, 'confirmPassword'); ?>
</div>

遵守规则:

array('newPassword', 'length', 'max'=>100,'min'=>6),
array('newPassword', 'compare', 'compareAttribute'=>'username','operator'=>'!=', 'message'=>'Password must not be the same as username'),
array('newPassword', 'compare', 'compareAttribute'=>'confirmPassword','message'=>'Please enter the same password twice'),
array('confirmPassword', 'safe'),

当我第一次输入newPassword时,验证将触发并显示“输入相同”错误消息。如果我然后正确输入confirmPassword,它不会隐藏。如果我然后更改confirmPassword,然后更改newPassword以匹配。,则会隐藏错误。它只在我更改newPassword字段时才起作用 - 所以我必须向后填写表单才能正确隐藏错误。

我错过了什么吗?

[edit]我可以强制验证在具有compareAttribute规则的字段上触发,方法是使用JavaScript暂时清空字段的值,触发验证,然后重新应用之前的值并再次触发验证。虽然看起来有些疯狂。

2 个答案:

答案 0 :(得分:2)

我猜你正在使用客户端验证?

我认为这不符合您的要求的原因是当您更改newPassword字段以外的字段时,不会触发newPassword的规则。

不幸的是,当你改变另一个字段时,我不确定如何在一个字段上触发验证,尽管看起来你问that question before。 Jon的答案似乎建议你可以在javascript的onchange中使用$.fn.yiiactiveform.updateInput来触发验证?

答案 1 :(得分:-2)

设置运算符

array('newPassword', 'compare', 'compareAttribute'=>'confirmPassword','operator'=>'==' ,'message'=>'Please enter the same password twice'),**strong text**