Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Pour effacer un formulaire, j'utilisais : $form-> reset(); dans Zend v1.
Comment effacer un formulaire après l'avoir validé?
Merci.
Hors ligne
Salut, normalement tu n'as pas besoin si tu ne ré-injecte pas les données depuis ton contrôleur il ne sera pas rempli (mais à confirmé je suis pas certain de ce que j'avance)
Hors ligne
Merci Orkin mais voila :
[lang=php]$form = new ContactForm(); $inputFilter = new ContactFormInputFilter(); $formTemplate = 'site/site/contact'; $formType = \DluTwBootstrap\Form\FormUtil::FORM_TYPE_HORIZONTAL; $form->setInputFilter($inputFilter); $validData = null; if ($this->request->isPost()) { $form->setData($this->request->getPost()); if ($form->isValid()) { $formData = $form->getData(); $validData = \Zend\Debug\Debug::dump($formData, 'Valid form data', false); } //die("aAA"); } $viewModelForm = new ViewModel(); $viewModelForm->setVariables(array( 'form' => $form, 'formType' => $formType, 'validData' => $validData, )); $viewModelForm->setTemplate($formTemplate); return $viewModelForm;
Avec ce code cela me le fait.
J'ai aussi un autre problème avec les formulaires. En local quand j'utilise un formulaire il s'affiche correctement mais en vrai (OVH, production), c'est comme s'il ne chargeais pas les scripts.
Il me perd toute la disposition de la page, genre le menu de navigation est dans le contenu du texte (content). Il faut que je recharge une fois pour trouver la bon affichage... Une idée?
Hors ligne
Pour ton problème OVH je n'ai aucune idée.
Pour les formulaires c'est le setData qui affecte les données au formulaire et tu en as besoin pour la validation donc tu es obligé de le faire.
Par ailleurs je te recommande de faire comme ceci c'est plus propre d'utiliser les getters $form->setData($this->getRequest()->getPost()->toArray()); Le toArray n'est pas obligatoire mais il évite d'avoir à faire des traitements spécifique (si c'est en brut il appelle des méthode en plus notamment ArrayUtils::iteratorToArray donc c'est un poil plus gourmand)
La solution serait donc de faire un $form->setData(null) mais je pense que ça va planter car il attend un tableau ou un objet. Donc tu peux te faire chier à créer un tableau avec une entrée pour chaque champ de ton formulaire avec une valeur null. Le plus simple serait de retourner un ton ViewModel un nouveau formulaire, au lieu de lui donner $form tu lui donnes new ContactForm().
Tu dois même pouvoir faire mieux, c'est créer une fabrique soit sous forme d'une classe soit directement dans ton Module.php pour affecter automatiquement ton inputFilter à ton formulaire et tu le récupère via le service manager ça t'optimise un peu le code.
Par exemple :
[lang=php] public function getServiceConfig() { return array( 'shared' => array( 'Application\Form\LoginForm' => false, // Pour ne pas récupérer la même instance avec chaque appel du serviceManager ), 'factories' => array( 'Application\Form\LoginForm' => function($sm) { $form = new LoginForm(); $form->setInputFilter(new \Application\Form\LoginFilter()); return $form; }, } } } // Dans ton contrôleur $form = $this->getServiceLocator()->get('Application\Form\LoginForm'); //Et si tu veux vraiment optimiser encore plus tu fais une variable protected protected $loginForm = null; // Le boolean $new permet de récupérer une nouvelle instance si tu veux le récupérer plusieurs instance différentes dans ta même requête (ton cas d'utilisation s'y prête normalement) public function getLoginForm($new = false) { if (!$this->loginForm || $new) { $this->setLoginForm($this->getServiceLocator()->get('Application\Form\LoginForm')); } return $this->loginForm; } public function setLoginForm($loginForm ) { $this->loginForm = $loginForm ; return $this; }
Ensuite pour les ViewModel tu n'es pas obligé d'aller aussi loin dans la décomposition
[lang=php]$viewModelForm = new ViewModel(array( 'form' => $form, // à remplace par new ContactForm() 'formType' => $formType, 'validData' => $validData, )); $viewModelForm->setTemplate($formTemplate);
Tu gagnes quelques lignes, après tu as peut être une raison particulière de faire comme ça.
Hors ligne
Merci Orkin,
Oui c'est pas un drame que cela se remplisse. Pour le moment je me bat à savoir pourquoi mon probleme fait sur OVH et pas en local. J'ai remarqué que sur Salfari cela ne le fait pas, que sur Firefox... J'ai peux etre mal testé mais cela me fait bizarre. Et si j'enlève le formulaire cela ne se produit pas... Bizarre non ?
Hors ligne
Oui c'est bizarre. Relis mon message je l'ai édité pour t'apporter plus de précisions.
Hors ligne
Orkin a écrit:
Oui c'est bizarre. Relis mon message je l'ai édité pour t'apporter plus de précisions.
Oui merci.
J'ai pris l'exemple du module "DluTwBootstrap" pour le formulaire....
Hors ligne
Essaies de suivre la documentation officielle en générale il y a pas mal de bonnes pratique. Sinon tu as le bloc de Bakura (un des principal contributeurs des formulaires), son webinar a été mis en ligne hier sur le site de Zend tu devrais apprendre pas mal de chose.
Hors ligne