Bonjour,
Alors j'espère que quelqu'un aura une réponse a m'apporter sur un formulaire assez complexe que je dois mettre en oeuvre...
Bon pour résumer et comprendre ma situation :
Je dois mettre en oeuvre un formulaire d'inscription assez complexe... (désolé pas possible de le changer, on me le demande ainsi...)
Donc quand j'entre une compagnie, la personne peux rajouter des bureaux, et dans chaque bureau, la personne peux rajouter divers informations (url, contact...etc...).
Niveau formulaire j'ai cela :
compagnie -> [array embed] bureaux -> [array embed] urls|contacts|...
A la validation, j'ai bien mes bureaux (même ceux rajouté a la volé avec mon overload de la méthode bind et un add des forms a la volé en fonction des values). Parcontre pour chaque bureau, je n'ai plus mes champs rajouté a la volé....
Voici les différents portions de codes:
!! CompagnieForm.class.php
// Dans CompagnieBureauxForm.class.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public function addBureau($num) { $b = new CompagnieBureau(); $b->setCompagnie($this->getObject()); $bf = new CompagnieBureauForm($b); $this->embeddedForms['bureaux']->embedForm($num, $bf); $this->embedForm('bureaux', $this->embeddedForms['bureaux']); } public function bind(array $values = null, array $files = null) { foreach ($values['bureaux'] as $k=>$b) { if (!isset($this['bureaux'][$k])) { $this->addBureau($k); } // ici je force le binding dans chaque sous formulaire pour générer les sous champs a la volé $this->embeddedForms['bureaux']->embeddedForms[$k]->bind($values['bureaux'][$k]); } return parent::bind($values, $files); }
Donc mes binds sont bien passé dans les sous formulaires et les sous-sous formulaires... Parcontre lors du render je n'ai qu'un champs... Les autres (meme si le bind et que le rajout a été effectué) ne sont pas du tout là!. De plus ça me génére une erreur, mais aucun output (pourtant en environnement de dev avec tout qui est actif...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 // Methode permettant de rajouter un form (embed) de manière générique... public function addForm($modelName, $n) { $classname = 'CompagnieBureau'.ucfirst($modelName); $formname = $classname.'Form'; $o = new $classname(); $o->setCompagnieBureau($this->getObject()); $m = 'get'.ucfirst($modelName).'s'; $objs = $this->getObject()->$m(); $objs->add($o); $m = 'set'.ucfirst($modelName).'s'; $this->getObject()->$m($objs); $of = new $formname($o); $this->embeddedForms[$modelName.'s']->embedForm($n, $of); $this->embedForm($modelName.'s', $this->embeddedForms[$modelName.'s']); } // Methode permettant de rajouter un form a la volé (ça passe pas...) protected function bindForm($modelName, array $values = null, array $files = null) { foreach ($values[$modelName.'s'] as $k=>$o) { if (!isset($this[$modelName.'s'][$k])){ $this->addForm($modelName, $k); } } } public function bind(array $values = null, array $files = null) { $this->bindForm('url', $values, $files); $this->bindForm('contact', $values, $files); $this->bindForm('telephone', $values, $files); $this->bindForm('fondateur', $values, $files); $this->bindForm('dirigeant', $values, $files); foreach ($this->embeddedForms as $name=>$form) { if (isset($values[$name])) $this->embeddedForms[$name]->bind($values[$name]); } $output = parent::bind($values, $files); return $output; }
PS: le binding générique et la génération a la volé des forms marchent aux embedForm de 1er niveau, parcontre ça coince a plus bas...
Bref, ça fais 3 jours que je suis dessus, mais impossible de savoir... Quelqu'un aurait une idée?
Partager