Salut
J'ai un problème au niveau de la régénération du mot de passe il ne reconnait pas le champs passoword2
Règle de validation

'password' => array(
            array(
                'rule' => 'notEmpty',
                'message' => "Le mot de passe ne peut pas être vide",
                'allowEmpty' => false
            ),
            array(
                'rule' => array('identicalFieldValues', 'password2'),
                'message' => "Les passwords doivent être identique"
            )
        ),

la règle personnalisé

public function identicalFieldValues( $field=array(), $compare_field=null ){
    foreach( $field as $key => $value ){ 
        $v1 = $value; 
        $v2 = $this->data$this->name]$compare_field];                  
        if($v1 !== $v2) return false;
        else continue;
    } 
    return true;
    }

Dans ma vue passord.ctp j'ai ce formulaire

<?= $this->Form->create('User'); ?>
                <?= $this->Form->input('password', array('label' => "Mot de passe")); ?>
                <?= $this->Form->input('password2', array('type' => 'password', 'label' => "Confirmer Mot de passe")); ?>
            <?= $this->Form->end("Modifier"); ?>

Quand je fait un débug le résultat des deux mots de passe est correcte :

$field = array(
    'password' => ' *****'
)
$compare_field = 'password2'
$key = 'password'
$value = '36286a18024265068c2c7a68588f2e009d6aab00'
$v1 = '36286a18024265068c2c7a68588f2e009d6aab00'

Merci de votre aide en avance

1 réponse


Kareylo
Réponse acceptée

Ca ne serait pas plutôt :

'password' => array(
    'rule' => 'notEmpty',
    'message' => "Le mot de passe ne peut pas être vide",
    'allowEmpty' => false
),
'password2' => array(
    'rule' => 'identicalFieldsValues',
    'message' => "Les passwords doivent être identiques"
),

Et la règle :

public function identicalFieldsValues($check, $limit){
    $field = key($check);
    return $check$field] == $this->data'User']'password'];
}

Perso, c'est ce que j'ai et ça fonctionne très bien ...