2011-05-02 3 views
0

ZF 1.11.3 ici.Confirmer le même mot de passe avec Zend_Filter_Input

$validators = array(
    'pass1' => array('presence' => 'required'), 
    'pass2' => array(array('Identical', true, 'token' => 'pass1')) 
), 

$input = new Zend_Filter_Input(array(), $validators, $this->_request->getParams()); 

if (!$input->isValid()) { 
    var_dump($input->getMessages()); 
} 

En utilisant le code ci-dessus, je suis (FirePHP formaté, en fait):

['pass2'] => 
array(
    ['notSame'] => 'The two given tokens do not match' 
) 

Comme vous l'avez peut supposer, cette erreur apparaît même si "pass1" et "pass2" contiennent les même chaîne (il s'agit essentiellement d'un formulaire de confirmation de mot de passe).

Je ne peux pas utiliser Zend_Form ou addValidator() (ne demandez pas), donc je dois jongler avec cette syntaxe, ce qui explique pourquoi je pense cela ne fonctionne pas. Je fais référence à array(array('Identical', true, 'token' => 'pass1')). J'ai même essayé array(array('Identical', true, array('token' => 'pass1'))), obtenant la même erreur. Je ne semble pas comprendre où ces tableaux doivent être placés.

Suggestions, corrections ou "halp!".

Répondre

0

Si Zend_Filter_Input devait utiliser le contexte, il validerait à comparer la valeur desome_input_name, pas une chaîne comme some_input_name. Et parce que je n'utilise pas Zend_Form, il ne peut pas utiliser de contexte.

Zend_Filter_Input ne fonctionne pas avec le contexte, mais par des Zend_Form_Element vous pouvez utiliser le contexte.

http://framework.zend.com/issues/browse/ZF-10673

1

Si vous ne pouvez pas utiliser Zend_Valiate_* vous ne pouvez pas utiliser Zend_Filter_Input parce que Zend_Filter_Input va essayer de créer des instances des validateurs données dans le tableau.

En outre, je pense que votre syntaxe est fausse. Regardez cet exemple du manuel:

$validators = array(
    'password' => array(
     'Identical', 
     'fields' => array('password1', 'password2') 
    ) 
); 
+0

Je ne sais pas où vous avez obtenu cet exemple de, mais je regarde le manuel en ce moment [et il est pas là] (http://framework.zend.com/manual /fr/zend.validate.set.html). I ** peut ** utiliser Zend_Validate_ *; Je n'ai pas dit que je ne pouvais pas. Je ne peux pas utiliser la syntaxe [(plus facile) de addValidator()] (http://www.wjgilmore.com/blog/entry/validating_identical_passwords_with_the_zend_framework). J'ai déjà utilisé Zend_Filter_Input, mais pas celui de "Identique". – nevvermind

+0

Ok, j'ai joué un peu dans la source de ZF et il semble que ça valide ma valeur d'entrée "pass2" (disons "xxx") ** à "pass1" **, pas ** la valeur de ** "pass1" . Si je tape "pass1" à l'entrée de texte "pass2", cela fonctionne. Comment ZF sait-il exactement que la valeur du jeton est un nom d'entrée et non une valeur réelle? Le code est dans Zend_Validate_Identical :: isValid(). – nevvermind

Questions connexes