2010-10-22 21 views
5

Ho una regola di convalida personalizzata per verificare se due password immesse sono uguali e, se non lo sono, desidero avere un messaggio che dice "Le password non corrispondono".cakephp Messaggio di regola di convalida personalizzata

La regola funziona, tuttavia, quando le password non corrispondono, viene visualizzato semplicemente il messaggio di errore normale, che succede?

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

si dice "Questo campo non può essere lasciato vuoto"

EDIT:

La cosa strana è, se lascio uno dei campi password vuoti, entrambi i messaggi di errore dicono "Questo campo non può essere lasciato vuoto"

Tuttavia, se metto qualcosa in entrambi, poi si dice correttamente 'le password non corrispondono'

risposta

6

Penso che hai fatto troppo complessa. Ecco come lo faccio:

// 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 non sapevo è possibile specificare il messaggio di errore come opzione in forma di supporto, questo semplifica molto le cose! –

+0

È nel ricettario - http://book.cakephp.org/view/1401/options-error. Si noti che le etichette per i campi "confirm_password" e "password" vengono cambiate. – bancer

Problemi correlati