sfForm, embedForm et bind()
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:
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:
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:
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:
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 ?