I have a problem checking Cakephp 2.
I am trying to check multiple fields on an edit form. Some of them are password and confirm the password.
I want to check both only if they are supplied. If they are empty, I do not change the password, but if the user writes over them, I would like to check if they have a minimum length or password matches.
the code:
'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 ),
I don’t know if I need to define some rules of the edit () function in the controller, or this should be enough, but my code does not work.
Thanks!
Edit: (Controller Code)
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')); }
(View code)
<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')); ?>