Bonjour,
Je travaille sur un formulaire un peu complexe et du coup, je me suis mis, non sans mal, aux embedForms de symfony. Mon problème, c'est que je n'arrive pas à lier les données | récupérer les données liées.
Le contexte :
L'intérêt de la classe ImportForm, c'est de pouvoir l'utiliser avec ses méthodes dans un autre contexte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 class GestionForm extends sfForm // classe formulaire perso class GessehPeriodeForm extends BaseGessehPeriodeForm // classe doctrine class ImportForm extends sfForm // classe perso qui contient un unique champ file 'fichier'
On a donc dans gestionActions :
Le problème se pose au niveau du traitement des données. Pour le formulaire hérité de GestionForm, pas de soucis, j'utilise une fonction perso avec un traitement à part. Pour les autres ça se complique, j'ai donc créé une fonction saveEmbeddedForms à partir d'exemples glanés sur le net.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $this->form = new GestionForm(); $this->form->embedForm('PromoP2', new ImportForm()); $this->form->embedForm('Periode1', new GessehPeriodeForm()); $this->form->embedForm('Periode2', new GessehPeriodeForm()); $this->form->embedForm('Periode3', new GessehPeriodeForm()); $this->form->embedForm('Periode4', new GessehPeriodeForm());
Et je me heurte à un message d'erreur dans le traitement de l'instance de ImportForm : $file n'est pas un objet.
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 // lib/form/GestionForm.class.php [...] public function saveEmbeddedForms($con = null, $forms = null) { if (is_null($forms)) $forms = $this->getEmbeddedForms(); foreach ($forms as $key => $form) { if ($form instanceof sfFormDoctrine) { $form->bind($this->values[$key]); $form->save($con); $form->saveEmbeddedForms($con); } elseif ($form instanceof sfForm) { if($form->isMultipart()) $form->bind($this->values[$key], $this->values[$key]); else $form->bind($this->values[$key]); if($form->isBound()) $form->save(); $form->saveEmbeddedForms($con); } else $this->saveEmbeddedForms($con, $form->getEmbeddedForms()); } }
Au final, je n'arrive pas à récupérer l'objet File du formulaire. Et pourtant la classe est liée aux données (->isBound() : true).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // lib/form/ImportForm.class.php [...] $file = $this->getValue('fichier'); $filename = sha1($file->getOriginalName()).$file->getExtension($file->getOriginalExtension()); $file->save(sfConfig::get('sf_upload_dir').'/'.$filename); [...]
Je coince un peu... Quelqu'un aurait une idée de ce que j'ai mal fait ?
Partager