Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je souhaite avoir plusieurs formulaires sur la même page qui renvoient à la même action. En passant un paramètre à l'url de chaque formulaire cela marche sans soucis.
J'ai bien mes trois formulaires qui se remplissent des données et s'enregistrent.
Par contre lorsqu'un formulaire n'est pas valide, les autres formulaires ne se peuplent pas de leurs données, ils sont vides. Seul le formulaire qui retourne des erreurs se remplit.
J'ai testé de faire un print_r sur mes tableaux qui servent à peupler les autres formulaires et les données s'affichent bien sans soucis.
Avez-vous une idée d'où vient le problème et comment y remédier ?
Merci
Hors ligne
Si ca n'apparait pas, qu'une seule réponse, tes formulaires ne sont pas peuplés.
Hors ligne
Il me semble que pour qu'ils se peuplent, il faut obligatoirement faire appel à Zend_Form::isValid()...
EDIT: "obligatoirement" dans le cas où l'on appel pas populate() avec les données POST.
Dernière modification par Mr.MoOx (07-04-2009 12:42:46)
Hors ligne
La méthode isValid() fait elle-même appel à la méthode populate(), méthode qui peut être appelée directement sans passer par isValid.
Dernière modification par keilnoth (07-04-2009 11:04:25)
Hors ligne
Mais pourtant chacun de mes formulaires est peuplé. Ils comportent tous la méthode populate, cela marche impeccable en affichage normal, ma page affiche bien les formulaires peuplés.
Ce n'est que si un formulaire retourne une erreur qu'ils ne sont pas peuplés. Et j'ai bien fait un print_r des array qui servent à peupler et ils s'affichent sans problème. C'est donc la méthode populate qui ne marche pas ?
Il doit y avoir un conflit quelque part dans les méthodes populate.
Si la méthode isValid() fait un populate cela peut expliquer le problème car chaque formulaire est indépendant et donc peupler avec les données du $_POST rendra forcément un seul formulaire plein et les autres vides.
Comment gérer vous plusieurs formulaires sur la même page ? Ma méthode n'est sans doute pas la bonne
Dernière modification par eMeRiKa (08-04-2009 12:38:46)
Hors ligne
J'ai trouvé la solution. Avant pour chaque formulaire je faisais :
if($this->_request->isPost() AND $forminfos2->isValid($_POST) AND $type == 'forminfos2') { ... }
avec $type le paramètre passé par l'url. En inversant l'ordre des conditions :
if($type == 'forminfos2' AND $this->_request->isPost() AND $forminfos2->isValid($_POST)) { ... }
Le problème n'existe plus. Il semble donc que la méthode isPost pause problème. Malgré le fait qu'elle soit bien liée à chaque instance de Zend_Form elle agit sur mes trois formulaires.
Dernière modification par eMeRiKa (08-04-2009 13:11:06)
Hors ligne
Il est préférable d'appeler setDefaults au lieu de populate, qui est un simple alias (ça fait un appel de méthode en moins). Il y en a déjà assez avec les decorators.
Hors ligne
Pages: 1