Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Dans un formulaire de création d'utilisateur, j'ai un 'select' qui est rempli lors de la saisie du code postal, et qui donne la liste des villes pour un code postal donné.
Dans mon formulaire :
[lang=php] // Ville (select alimenté par le code postal) $this->add(array( 'name' => 'Town', 'type' => 'Select', 'required' => true, 'options' => array( 'label' => $translator->translate('formTown','user'), 'value_options' => array(), 'empty_option' => $translator->translate('formEmptyTown','user') ) ));
Le tableau des options est bien sur vide à la création du formulaire.
Le 'select' est bien mis à jour lors du changement du code postal, le contrôleur fonctionne donc très bien.
Lors de la validation du formulaire, j'ai un message me disant que la valeur n'est pas présente dans la liste. En effet, un mettant dès la construction une valeur teste, le formulaire est bien validé.
J'ai lu dans un forum, qu'une personne avait directement modifier la classe 'Element\select' pour ajouter une directive de non contrôle de la valeur dans le tableau des options.
Il n'y a pas une autre solution plus propre ?
Hors ligne
Peut on récupérer le 'select' avant le '$form->isValid()' pour y mettre les valeurs, ou supprimer le contrôle ?
Hors ligne
Euh dsl je comprend pas bien ton problème.
Ton select est bien remplie lors de l'affichage, mais à la validation de ton formulaire la valeur est nulle?
Vérifie que ton select est construit correctement (en js je suppose) et que le "name" est bon.
TU peu vérifier la valeur récupérée en récupérant les données en POST avant de vérifier la validité du formulaire:
[lang=php] $this->getRequest()->getPost('name');
Hors ligne
Salut, retirer la validation côté serveur c'est pas une bonne chose. Ce que tu peux faire c'est créer ton propre composant qui va contenir l'input pour saisir le code postal et le select. De cette façon tu pourras facilement te faire un validateur qui va prendre la valeur du input et faire la requête pour vérifier que la valeur sélectionnée dans le select est bien correcte avec celle ou celles retournées par la requête.
Tu peux aussi récupérer la valeur du code postal dans le post comme te l'a dit flobrflo et ensuite remplir le select avec la requête juste avant le isValid.
Hors ligne
Orkin a écrit:
Salut, retirer la validation côté serveur c'est pas une bonne chose. Ce que tu peux faire c'est créer ton propre composant qui va contenir l'input pour saisir le code postal et le select. De cette façon tu pourras facilement te faire un validateur qui va prendre la valeur du input et faire la requête pour vérifier que la valeur sélectionnée dans le select est bien correcte avec celle ou celles retournées par la requête.
Tu peux aussi récupérer la valeur du code postal dans le post comme te l'a dit flobrflo et ensuite remplir le select avec la requête juste avant le isValid.
Oui, je pensais à cette solution. Retirer la validation ne me parait pas être une bonne chose, bien que la validation est faite via le composant ajax qui rempli le 'select'. Je vais essayer de créer un composant, cela fera un bon exercice.
flobrflo a écrit:
Euh dsl je comprend pas bien ton problème.
Dans le formulaire, le 'select' est créé avec l'array de 'values_option' vide. Comme le 'select' est complété par de l'ajax, lors de la validation du formulaire, la valeur du 'select' ne peut pas être vérifié dans les valeurs qui devraient se trouver dans 'values_option'. Sauf mettre les 33000 communes de France dedans....
Hors ligne
ok, mais tu peu bien regarder ce qu'il y a dedans non?
est ce qu'au moment de valider ton formulaire t'a bien le nom d'une commune?
Hors ligne
Pages: 1