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 :
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'
L'intérêt de la classe ImportForm, c'est de pouvoir l'utiliser avec ses méthodes dans un autre contexte.

On a donc dans gestionActions :
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());
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
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());
  }
}
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
// 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);
 
[...]
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).

Je coince un peu... Quelqu'un aurait une idée de ce que j'ai mal fait ?