CakePHP 2 - 验证密码字段

时间:2013-09-27 09:18:30

标签: php validation cakephp cakephp-2.0

我对Cakephp 2验证有一些问题。

我正在尝试验证“编辑”表单上的多个字段。其中一些是密码和确认密码字段。

我想要仅在提供它们时验证它们。如果它们是空的我不会更改密码,但如果用户写了它们,我想验证它们是否有minLength或密码匹配。

代码:

'pwd' => array(
            'length' => array(
                'rule'      => array('between', 8, 40),
                'message'   => 'Your password must be between 8 and 40 characters.',
                'allowEmpty' => true
            ),
        ),
'pwd_repeat' => array(
            'length' => array(
                'rule'      => array('between', 8, 40),
                'message'   => 'Your password must be between 8 and 40 characters.',
                'allowEmpty' => true
            ),
            'compare'    => array(
                'rule'      => array('validate_passwords'),
                'message'   => 'The passwords you entered do not match.',
                'allowEmpty' => true
            ),

我不知道是否必须在控制器中定义一些关于edit()函数的规则,或者它应该足够了,但我的代码不起作用。

谢谢!

编辑:(控制器代码)

public function edit($id = null) {
        if (!$this->User->exists($id)) {
        throw new NotFoundException(__('Usuario incorrecto'));
    }
    if ($this->request->is('post') || $this->request->is('put')) {

                if ($this->User->save($this->request->data)) {
                    $this->Session->setFlash(__('El usuario ha sido actualizado.'));
                    return $this->redirect(array('action' => 'index'));
                } else {
                    $this->Session->setFlash(__('El usuario no ha podido actualizarse. Por favor, inténtelo de nuevo.'));      
                }
                unset($this->request->data['User']['pwd']);
                unset($this->request->data['User']['pwd_repeat']);
    } else {
        $options = array('conditions' => array('User.' . $this->User->primaryKey => $id));
        $this->request->data = $this->User->find('first', $options);
    }
    $roles = $this->User->Role->find('list');
    $this->set(compact('roles'));
}

(查看代码)

<div id="contenedor" class="users form">
<?php echo $this->Form->create('User', array('name' => 'form')); ?>
<fieldset>
    <legend><?php echo __('Editar Usuario'); ?></legend>
<?php
    echo $this->Form->input('id');
    echo $this->Form->input('username', array('label' => __('Usuario')));
    echo $this->Form->input('pwd', array('label' => __('Contraseña'), 'type' => 'password', 'name' => 'pass', 'onKeyUp' => 'habilita()', 'value' => ''));
            echo $this->Form->input('pwd_repeat', array('label' => __('Repite Contraseña'), 'type' => 'password', 'name' => 'rpass', 'disabled' => 'disabled'));
    echo $this->Form->input('firstname', array('label' => __('Nombre')));
    echo $this->Form->input('lastname', array('label' => __('Apellidos')));
    echo $this->Form->input('telephone', array('label' => __('Teléfono')));
    echo $this->Form->input('email', array('label' => __('Email')));
    echo $this->Form->input('role_id', array('label' => __('Rol')));
?>
</fieldset>
<?php echo $this->Form->end(__('Aceptar')); ?>

1 个答案:

答案 0 :(得分:6)

制定像这样的验证规则

'pwd' => array(
    'length' => array(
        'rule'      => array('between', 8, 40),
        'message'   => 'Your password must be between 8 and 40 characters.',
    ),
),
'pwd_repeat' => array(
    'length' => array(
        'rule'      => array('between', 8, 40),
        'message'   => 'Your password must be between 8 and 40 characters.',
    ),
    'compare'    => array(
        'rule'      => array('validate_passwords'),
        'message' => 'The passwords you entered do not match.',
    )
)

你的validate_passwords函数应该是这样的。

public function validate_passwords() {
    return $this->data[$this->alias]['pwd'] === $this->data[$this->alias]['pwd_repeat']
}