2014-09-22 27 views
1

我正在做一个函数来更改用户密码。在用户模型的内部我创建了三个变量,如下所示。规则中两个变量之间的规则在Yii中不起作用

public $oldPassword; 
public $newPassword; 
public $repatePassword; 

现在我需要比较newPassword和repare密码在一起,我在模型中添加followinf规则。

public function rules() 
{ 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    return array(
     array('username, password', 'required'), 
     array('username', 'length', 'max'=>20), 
     array('password', 'length', 'max'=>255), 
     array('oldPassword', 'findPassword', 'on' => 'changePwd'), 
     //array('repatePassword','compare','compareAttribute'=>'newPassword', 'on'=>'changePwd'), 
     // The following rule is used by search(). 
     // @todo Please remove those attributes that should not be searched. 
     array('id, username, password', 'safe', 'on'=>'search'), 
    ); 
} 

我有以下形式。

<div class="row"> 
     <?php echo $form->labelEx($model,'Old Password'); ?> 
     <?php echo $form->passwordField($model,'oldPassword',array('size'=>20,'maxlength'=>20)); ?> 
     <?php echo $form->error($model,'oldPassword'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'New Password'); ?> 
     <?php echo $form->passwordField($model,'newPassword',array('maxlength'=>255)); ?> 
     <?php echo $form->error($model,'newPassword'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'Repate Password'); ?> 
     <?php echo $form->passwordField($model,'repatePassword',array('maxlength'=>255)); ?> 
     <?php echo $form->error($model,'repatePassword'); ?> 
    </div> 

    <div class="row buttons"> 
     <?php echo CHtml::submitButton('Update'); ?> 
    </div> 

现在,当我在两个字段中正好放置相同的值时,它仍然给我说值不一样。为什么是这样?

+0

显示完整的'rules()'方法。 'newPassword'必须有自己的规则才能被声明为安全的并被分配给变量。 – 2014-09-22 19:09:47

+0

编辑questipn – Steve 2014-09-22 19:18:54

回答

2

将以下规则添加到您的rules()方法中。

array('oldPassword,newPassword,repatePassword','required','on'=>'changePwd') 

没有规则的属性,该属性不会被大量分配给模型,因此将不可用于任何验证。

或者,您可以将required更改为safe如果您只是想允许赋值,并且不会创建实际需要的属性,尽管在这种情况下required对我来说很合理。

根据你的规则,它说他们不匹配的原因是因为newPassword没有被分配,所以是一个空字符串与你想要的密码进行比较。

+0

你好,这固定了我所有的问题。感谢您的帮助,我不知道。 – Steve 2014-09-23 07:38:03