Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je suis actuellement en train de migrer un projet Zf1 en Zf2 et je reste bloqué sur la possibilité d'effectué un populate du formulaire lorsque celui-ci est invalide pour que les données soient mise dans le formulaire avant de l'envoyer à la vue.
Est-ce qu'une fonction l'a remplacé ?
Code ZF1 :
if (!$form->isValid($_POST)) { $form->populate($_POST); //On sauvegarde le formulaire dans la vue $this->view->form = $form; return; }
Code ZF2
if (!$form->isValid($_POST)) { //Populate ? return new ViewModel(Array('form'=>$form)); }
Dernière modification par J0r (08-11-2012 13:22:40)
Hors ligne
Salut,
Les formulaires ont complètement été réécrits dans ZF 2. Il faut maintenant appeler la fonction setData.
if ($this->request->isPost()) { $form->setData($this->request->getPost()); }
Hors ligne
Je le fait déjà mais après la validation les données ne sont plus là :
[lang=php] //Création du formulaire $form = new MotdepasseForm(); //Si ce n'est pas une requete POST alors on renvoi sur l'index if (!$this->getRequest()->isPost()) { return new ViewModel(Array('form'=>$form)); } //On applique les filtres et les validateurs $formFilter = $form->prepareFilters(); $form->setInputFilter($formFilter); //On rentre les données passées en POST dans le formulaire $form->setData($this->getRequest()->getPost()); //On verifie les validateurs du formulaires if (!$form->isValid($_POST)) { //Les données ne sont plus dans le formulaire ! return new ViewModel(Array('form'=>$form)); }
Dernière modification par J0r (08-11-2012 11:47:05)
Hors ligne
Je maitrise pas à fond les formulaires mais tu les utilises pas du tout comme il faut.
Toute la partie préparation etc ... est normalement faite automatiquement soit via ta factory soit directement depuis le formulaire si tu implémente la bonne classe. Ensuite tu n'as pas besoin d'utiliser $_POST tu peux comme tu le fais plus haut utiliser $this->getRequest()->getPost()
En passant par le service manager et donc les factory tu récupères la même instance de ton formulaire et donc les données. Bakura pourra t'en dire plus c'est lui qui a fait le composant .
Hors ligne
J'ai juste suivi ce qui est dit en formation ZendFramework2
En relisant j'ai vu qu'il manquait le $form->prepareElements(); comme précisé ci-dessous ;
Tiré du projet présenté en formation (zf2widder.complete\module\HootAndHoller\src\HootAndHoller\Controller\LoginController.php) :
[lang=php] $request = $this->getRequest(); $form = new LoginForm(); $form->prepareElements(); if ($request->isPost()) { $filter = new LoginFilter(); $inputFilter = $filter->prepareFilters(); $form->setInputFilter($inputFilter); $form->setData($request->getPost()); if ($form->isValid()) { ....
Merci.
Dernière modification par J0r (08-11-2012 13:22:16)
Hors ligne
Justement tu en as un autre ici https://github.com/bakura10/ZendFormWebinar
Hors ligne
Quelle formation, si ce n'est pas indiscret ?
En fait ton code est pas forcément faux, mais ce n'est pas vraiment la méthode "recommandée". Comme l'a dit Orkin, tu peux aller voir le code de mon webinar que j'ai donné sur le sujet. Pour l'instnatn tu n'as accès qu'au code mais la vidéo devrait bientôt être disponible en libre accès (Zend FR a mis un peu de temps à la monter à cause de la Zend Con).
Que fait ce "prepareElements" ? Je suppose qu'il ajoute les éléments dans le formulaire ? Autant le faire directement dans le constructeur, c'est la pratique recommandée.
Hors ligne