Yii のビルトイン比較バリデーターを使用して、2 つのフォーム属性を比較しています。
<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 フィールドを変更した場合にのみ機能するように見えるため、エラーを正しく非表示にするには、フォームを逆に入力する必要があります。
何か不足していますか?
[編集] JavaScript を使用してフィールドの値を一時的に空にし、検証をトリガーしてから、前の値を再適用し、検証を再度トリガーすることにより、compareAttribute ルールを持つフィールドで検証を強制的にトリガーすることができます。ちょっとマズイようだけど。