2010-10-22 6 views
5

J'ai une règle de validation personnalisée pour vérifier si deux mots de passe entrés sont identiques, et s'ils ne le sont pas, je souhaite avoir un message indiquant que "Les mots de passe ne correspondent pas".cakephp Message de règle de validation personnalisée

La règle fonctionne, cependant, lorsque les mots de passe ne correspondent pas, il affiche simplement le message d'erreur normal, que se passe-t-il?

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; 
} 

Il dit: « Ce champ ne peut pas être laissée en blanc »

EDIT:

La chose étrange est, si je laisse l'un des champs de mot de passe vides, les messages d'erreur disent « Ce champ ne peut pas être laissée en blanc »

Cependant, si je mets quelque chose dans les deux, alors il est dit correctement « les mots de passe ne correspondent pas »

Répondre

6

Je pense que vous l'avez fait trop complexe. Voici comment je le fais:

// 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 je ne savais pas que vous pouvez spécifier un message d'erreur comme une option dans l'assistant de formulaire, cela simplifie beaucoup les choses! –

+0

Il est dans le livre de cuisine - http://book.cakephp.org/view/1401/options-error. Notez que les libellés des champs 'confirm_password' et 'password' sont activés. – bancer