比较Yii中不起作用的规则中两个变量之间的规则

时间:2014-09-22 17:36:25

标签: php 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>

现在,当我在两个字段中确切地输入相同的值时,它仍然告诉我值不相同。这是为什么?

1 个答案:

答案 0 :(得分:2)

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

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

如果没有属性规则,该属性将不会大量分配给模型,因此无法进行任何验证。

或者,如果您只想允许分配,则可以将required更改为safe,而不是实际需要属性,尽管在这种情况下required对我有意义。

根据您的规则,它说它们不匹配的原因是因为没有分配newPassword,所以将空字符串与您的预期密码进行比较。