2010-10-22 38 views
5

Tengo una regla de validación personalizada para verificar si dos contraseñas ingresadas son iguales, y si no son así, deseo tener un mensaje que diga "Las contraseñas no coinciden".cakephp Mensaje de regla de validación personalizada

La regla funciona, sin embargo, cuando las contraseñas no coinciden simplemente muestra el mensaje de error normal, ¿qué está pasando?

var $validate=array(
     'passwd2' => array('rule' => 'alphanumeric', 
         'rule' => 'confirmPassword', 
         'required' => true, 
         'allowEmpty'=>false)); 

function confirmPassword($data) 
{ 
    $valid = false; 
    if (Security::hash(Configure::read('Security.salt') .$data['passwd2']) == $this->data['User']['passwd']) 
    { 
     $valid = true; 
     $this->invalidate('passwd2', 'Passwords do not match'); 
    } 
    return $valid; 
} 

dice "Este campo no puede dejarse en blanco"

EDIT:

Lo extraño es que, si dejo uno de los campos de contraseña en blanco, dicen los dos mensajes de error "Este campo no puede se deja en blanco"

sin embargo, si pongo algo en ambos, entonces se dice correctamente 'las contraseñas no coinciden'

Respuesta

6

Creo que lo hizo demasiado complejo. Aquí es cómo lo hago:

// In the model 
    public $validate = array(
     'password' => array(
      'minLength' => array(
       'rule' => array('minLength', '8') 
      ), 
      'notEmpty' => array(
       'rule' => 'notEmpty', 
       'required' => true 
      ) 
     ), 
     'confirm_password' => array(
      'minLength' => array(
       'rule' => array('minLength', '8'), 
       'required' => true 
      ), 
      'notEmpty' => array(
       'rule' => 'notEmpty' 
      ), 
      'comparePasswords' => array(
       'rule' => 'comparePasswords' // Protected function below 
      ), 
     ) 
    ); 
    protected function comparePasswords($field = null){ 
     return (Security::hash($field['confirm_password'], null, true) === $this->data['User']['password']); 
    } 

// In the view 
echo $form->input('confirm_password', array(
    'label' => __('Password', true), 
    'type' => 'password', 
    'error' => array(
     'comparePasswords' => __('Typed passwords did not match.', true), 
     'minLength' => __('The password should be at least 8 characters long.', true), 
     'notEmpty' => __('The password must not be empty.', true) 
    ) 
)); 
echo $form->input('password', array(
    'label' => __('Repeat Password', true) 
)); 
+0

Oh, yo no sabía puede especificar mensaje de error como una opción en el asistente de formulario, eso simplifica mucho las cosas! –

+0

Está en el libro de cocina - http://book.cakephp.org/view/1401/options-error. Tenga en cuenta que las etiquetas para los campos 'confirm_password' y 'password' están conmutadas. – bancer

Cuestiones relacionadas