Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
$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
Voila, merci.
Hors ligne
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
Salut,
Plus facile encore, tu fais une action de validation par formulaire.
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+
Hors ligne