Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-05-2010 16:35:53

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Plusieurs Formulaires sur une même page.

Bonjour,

Comme expliqué dans un post d'aide précédent, j'ai à un endroit plusieurs formulaires différents sur la même page, qui sont affichés dans tes tabs jquery.
J'arrive à afficher mes formulaires sans problème, j'arrive à leur faire executer une action (enfin j'ai essayé que sur 2 et pour le moment çà marche).

Mon problème est que lorsque j'exécute mon formulaire, les autres formulaires sont vérifiés (et pour cause, je suis obligé de tous les vérifier parce que je ne sais pas exactement ou je me situe (dans quel formulaire).

Le problème, c'est que du coup, tous les validateurs de tous les formulaires sont vérifiés et alors affiche un message d'erreurs (d'ailleurs çà me vide même les formulaires qui étaient pré remplis avec des valeurs de la base de données).

Je sais pas si je suis vraiment clair, mais je vais mettre du code pour essayer d'être plus clair.

Controller :

Code:

        $etb_id = $this->_getParam('etb_id');
        
        $per_mapper = new Application_Model_PeriodesMapper();
        $liste_per = $per_mapper->fetchwithetb($etb_id);
        
        $mat_mapper = new Application_Model_MatieresMapper();
        
        $noms_per = array('per_1' => $liste_per[0]->libelle, 'per_2' => $liste_per[1]->libelle, 'per_3' => $liste_per[2]->libelle, 'etb_id' => $etb_id);
        $etats_per = array('etat_per_1' => $liste_per[0]->etat, 'etat_per_2' => $liste_per[1]->etat, 'etat_per_3' => $liste_per[2]->etat, 'etb_id' => $etb_id);
        
        $formDefinePeriodes    = new Application_Form_DefinePeriodes($noms_per);
        $formEtatPeriodes    = new Application_Form_EtatPeriodes($etats_per);
        

        $formNotation        = new Application_Form_Notation(array('etb_id_notation' => $etb_id));
        $formDefineLangues    = new Application_Form_DefineLangues(array('langues' => array('1234' => 'Anglais', '5678' => 'Allemand'), 'checkitem' => array('1234')));
        
        $formUploadPic    = new Application_Form_UploadEtbPic(array('etbid' => $etb_id));
        
        
        $this->view->notation = $formNotation;
        $this->view->definePeriodes = $formDefinePeriodes;
        $this->view->etatPeriodes = $formEtatPeriodes;
        $this->view->langues = $formDefineLangues;
        $this->view->uploadpic = $formUploadPic;
        $this->view->etbid = $etb_id;
        
        if ($this->getRequest()->isPost()) {
            
            //On regarde pour le formulaire de définition des périodes
            if ($formDefinePeriodes->isValid($this->getRequest()->getPost())) {
                $etb_id = $formDefinePeriodes->getValue('etb_id');
                
                $periode1 = $formDefinePeriodes->getValue('per_1');
                $periodes = new Application_Model_Periodes();
                $periodes->setLibelle($periode1);
                $periodes->setNum_periode(1);
                $periodes->setAscoid(1);
                $periodes->setEtbid($etb_id);
                
                $periodesmapper = new Application_Model_PeriodesMapper();
                $periodesmapper->updateLibellewithEtb($periodes);
                
                
                $periode2 = $formDefinePeriodes->getValue('per_2');
                
                $periodes = new Application_Model_Periodes();
                $periodes->setLibelle($periode2);
                $periodes->setNum_periode(2);
                $periodes->setAscoid(1);
                $periodes->setEtbid($etb_id);
                $periodesmapper->updateLibellewithEtb($periodes);
                
                $periode3 = $formDefinePeriodes->getValue('per_3');
                
                $periodes = new Application_Model_Periodes();
                $periodes->setLibelle($periode3);
                $periodes->setNum_periode(3);
                $periodes->setAscoid(1);
                $periodes->setEtbid($etb_id);
                $periodesmapper->updateLibellewithEtb($periodes);
                
                
            }
            
            if($formNotation->isValid($this->getRequest()->getPost())) {
                $etb_id = $formNotation->getValue('etb_id_notation');
                $nbre_decimales = $formNotation->getValue('Nbredecimales');
                
                $parametrage = new Application_Model_Parametrages();
                $parametrage->setEtbid($etb_id)
                            ->setNbredecimales($nbre_decimales);
                            

                $parametragemapper = new Application_Model_ParametragesMapper();
                $parametragemapper->save($parametrage);
            }

Donc voila, la partie qui pose problème se situe après la vérification de
if ($this->getRequest()->isPost())

Je vérifie mes 2 formulaires ce qui me pose problème, mais je ne trouve pas de moyen propre pour ne vérifier que celui sur lequel on a appuyé sur le bouton de validation.
(J'ai pas envi de passer une variable en paramètre get).
Après, je pourrais mettre un champs hidden dans chaque formulaire, qui contiendra le formulaire à vérifier, mais je pense que ce n'est pas non plus très propre.

C'est pour ca que je m'en remets à vous wink

Voila, merci.

Hors ligne

 

#2 29-05-2010 03:34:17

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: Plusieurs Formulaires sur une même page.

Code:

if ($formDefinePeriodes->isValid($this->getRequest()->getPost())) {
...

 if($formNotation->isValid($this->getRequest()->getPost())) {

Est-ce que t'as vérifié ton code...

Lorsqu'une requête en post est envoyé, tu fais la vérification des 2 formulaires. Tu devrais consulter ce que tu reçois en post, récupérer le nom du formulaire qui est envoyé et seulement vérifié les donnés de celui retourné.

Hors ligne

 

#3 07-06-2010 10:15:21

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: Plusieurs Formulaires sur une même page.

Salut,

Plus facile encore, tu fais une action de validation par formulaire. smile

notationAction()
periodesAction()

Et tu récupères avec getPost() tes valeurs et tu les tests dans formNotation ou formPeriodes...

Si ces formulaires sont liés, tu peux également travailler avec des subForm dans un seul et même formulaire. Ca te permet de faciliter l'affichage tout en conservant la possibilité de valider chaque formulaire indépendemment.

A+


Quelques tutoriaux Zend Framework !

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