2010-09-10 8 views
0

J'ai commencé à écrire une application ZF (v1.10.3) et j'ai choisi d'utiliser Zend_Config_Ini pour générer mes objets Zend_Form. C'était très bien jusqu'à ce que je devais tester pour des entrées de mot de passe identiques. Ceci est la partie qui est mauvaise conduite en ce moment:Confirmation du mot de passe Zend_Form avec .ini config - Peut-on le faire?

elements.password.type = password 

elements.password2.type = password 
elements.password2.options.validators.identical.validator = "Identical" 
elements.password2.options.validators.identical.options.token = password 

Au lieu de comparer les valeurs de ces deux éléments, il compare la valeur de password2 contre la chaîne « mot de passe ». Donc, un mot de passe, sauf « mot de passe » me donne l'erreur de validation suivant:

The token 'password' does not match the given token '*******' 

Y at-il une bonne façon de le faire? Le seul exemple d'utilisation de Zend_Validate_Identical avec Zend_Config_Ini que j'ai trouvé via Google provenait d'un site Web allemand, et quelqu'un semblait recommander exactement la même "solution" que mon code défaillant ci-dessus.

Je sais qu'il y a beaucoup de façons de le faire dans le code PHP, mais je me suis fortement engagé dans la configuration INI à ce stade, et je préfère ne pas l'abandonner ou faire une exception sauf si je dois absolument .

[EDIT] Voici mon plein newUserForm.ini:

method = "post" 
id = "newUserForm" 
accept-charset = "utf-8" 

elements.username.type = "text" 
elements.username.options.label = "Username" 
elements.username.options.required = true 
elements.username.options.validators.alnum = "Alnum" 
elements.username.options.validators.strlen.validator = "StringLength" 
elements.username.options.validators.strlen.options.min = "3" 
elements.username.options.validators.strlen.options.max = "32" 

elements.email.type = "text" 
elements.email.options.label = "Email address" 
elements.email.options.required = true 
elements.email.options.validators.email.validator = "EmailAddress" 

elements.password.type = "password" 
elements.password.options.label = "Password" 
elements.password.options.required = true 
elements.password.options.validators.strlen.validator = "StringLength" 
elements.password.options.validators.strlen.options.min = "6" 

elements.password2.type = "password" 
elements.password2.options.label = "Password (confirm)" 
elements.password2.options.required = true 
elements.password2.options.validators.identical.validator = "Identical" 
elements.password2.options.validators.identical.options.token = password 

elements.submit.type = "submit" 
elements.submit.options.label = "Submit" 

Et voici mon action du contrôleur:

public function indexAction() 
{ 
    $formConfig = new Zend_Config_Ini(APPLICATION_PATH.'/configs/newUserForm.ini'); 
    $newUserForm = new Zend_Form($formConfig); 
    $request = $this->getRequest(); 
    if ($request->isPost()) { 
     if ($newUserForm->isValid($request->getPost())) { 
      // create new user here 
      $this->_helper->redirector('index', 'index'); 
     } 
    } 
    $this->view->newUserForm = $newUserForm; 
} 

Répondre

3

Je viens d'essayer cela en utilisant quelque chose de similaire à votre code et il semblait fonctionne bien. J'utilise ZF 1.10.6. Donc, soit il y avait un problème qui a été corrigé entre ces deux versions (mais je ne vois rien de similaire dans le bug tracker), ou il y a quelque chose d'autre dans votre code qui cause un problème. Pouvez-vous poster votre fichier ini complet et le code du formulaire?

Voici mon script de test minimaliste, à titre de référence. Peut-être que vous pourriez voir si cela fonctionne pour vous:

<?php 
$view = new Zend_View(); 

$config = new Zend_Config_Ini('formtest.ini'); 
$form = new Zend_Form($config->user->signup); 
$form->setView($view); 

if (!empty($_POST)) { 
    var_dump($form->isValid($_POST)); 
    var_dump($form->getValues()); 
} 

echo $form; 

formtest.ini:

user.signup.action = "" 
user.signup.method = "post" 
user.signup.elements.password.type = password 
user.signup.elements.password2.type = password 
user.signup.elements.password2.options.validators.identical.validator = "Identical" 
user.signup.elements.password2.options.validators.identical.options.token = password 
user.signup.elements.submit.type = "submit" 

Dans ce test, la forme ne valide que si password2 est vide, ou les deux champs correspondent. De même, l'erreur que j'obtiens s'ils ne correspondent pas est "Les deux jetons donnés ne correspondent pas", ce qui ne correspond pas tout à fait au vôtre. Je ne sais pas si c'est pertinent.

+0

J'ai essayé votre INI et j'ai toujours le même problème. J'ai posté plus de mon code ci-dessus, mais je commence à penser qu'une mise à niveau du framework est en ordre. –

+0

Yup J'ai juste essayé avec votre dossier ini exact et cela a fonctionné bien pour moi aussi. Essayez donc de mettre à jour ZF pour voir si cela vous aide. –

+0

Il se trouve que j'ai d'anciennes versions de ZF qui traînent, alors j'ai juste essayé mon script de test en utilisant 1.10.2, et j'ai eu le même problème que vous. Donc, je suis confiant de mettre à jour ZF va résoudre votre problème. –