Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-03-2010 10:17:39

CinePhil
Membre
Date d'inscription: 24-03-2010
Messages: 19

[Zend_Form] [Résolu]Validator sur plusieurs éléments

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

 

#2 30-03-2010 09:22:29

CinePhil
Membre
Date d'inscription: 24-03-2010
Messages: 19

Re: [Zend_Form] [Résolu]Validator sur plusieurs éléments

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 :

Code:

        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 :

Code:

        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.

Code:

        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

 

#3 30-03-2010 09:45:07

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Form] [Résolu]Validator sur plusieurs éléments

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


----
Gruiiik !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages