Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour.
Je souhaiterais avoir un validator qui prend en compte plusieurs éléments pour sa vérification.
Dans mon formulaire, j'ai un Zend_Form_Element_Select contenant une liste de personnes et deux Zend_Form_Element_Text destinés à recevoir le nom et le prénom d'une nouvelle personne si l'utilisateur ne figure pas dans la liste proposée afin qu'il puisse s'y ajouter.
Mon formulaire prend en compte bien sûr cette saisie et ajoute l'utilisateur à la table des personnes puis récupère l'identifiant pour l'utiliser dans l'enregistrement des données du formulaire.
Je voudrais vérifier que l'utilisateur a bien :
- soit choisi une personne dans la liste ;
- soit entré une nouvelle personne (son nom ET son prénom).
De même, si une nouvelle personne est saisie, il faut indiquer son service :
- soit par choix dans la liste des services ;
- soit par saisie d'un nouveau service.
Il me faudrait donc un validator qui vérifie plusieurs éléments ou un validator général du formulaire qui vérifierait tout ça.
Faisable ?
Si oui comment ? Un petit tuto quelque part ?
Dernière modification par CinePhil (30-03-2010 09:59:35)
Hors ligne
Je pensais avoir trouvé une bonne solution donnée dans cette discussion
Malheureusement, contrairement à ce que dit l'auteur, chez moi cela ne fonctionne pas.
Voilà ce que j'ai fait :
if ($this->_request->isPost()) { $formData = $this->_request->getPost(); // V0.5 : Contrôle du choix ou de la saisie d'un émetteur if ($form->getValue('sel_emetteur') == '') { // Emetteur non choisi dans la liste => on rend obligatoire sa saisie $form->nom_emetteur->setRequired(true); $form->prenom_emetteur->setRequired(true); $this->view->error_message = "Vous devez choisir un émetteur ou donner le nom, le prénom et le service d'un nouvel émetteur inexistant dans la liste."; if (null === $form->getValue('sel_service')) { // Service du nouvel émetteur non choisi dans la liste $form->service->setRequired(true); } } // Fin if ($form->getValue('sel_emetteur') == '0') if ($form->isValid($formData)) {
Mais il semble que pour que $form->getValue('sel_emetteur') récupère la valeur entrée par l'utilisateur, il y ait d'abord besoin de la fonction $form->isValid($formData).
En effet, si je capture $form->getValue('sel_emetteur') avant et après le dernier if, comme ceci :
if ($this->_request->isPost()) { $formData = $this->_request->getPost(); echo '<br />sel_emetteur : '.$form->getValue('sel_emetteur'); // ... } // Fin if ($form->getValue('sel_emetteur') == '0') if ($form->isValid($formData)) { echo '<br />sel_emetteur : '.$form->getValue('sel_emetteur');
J'obtiens ceci à l'écran :
sel_emetteur :
sel_emetteur : 3
Très embètant !
Comment puis-je contourner ce problème ?
EDIT :
J'ai trouvé : En demandant simplement la valeur de $formData.
if ($this->_request->isPost()) { $formData = $this->_request->getPost(); // V0.5 : Contrôle du choix ou de la saisie d'un émetteur if ($formData['sel_emetteur'] == '0') {
Dernière modification par CinePhil (30-03-2010 09:59:07)
Hors ligne
Je te conseille un validateur personnalié :
Regarde ici :
http://framework.zend.com/manual/fr/zen … ments.html
Dans la partie Validator, tu as une zone "Note: Validation Context" et un exemple sur la validation de 2 champs en même temps. Ca devrait t'aider
Hors ligne
Pages: 1