Bonjour,
J'ai créé une classe de formulaire CommandeForm() qui gère plusieurs fois le même formulaires via un embedForm.
L'affichage se passe bien, la validation aussi mais c'est au moment de sauvegarder que le problème se pose : Call to undefined method CommandeForm::save()
Voici le code du formulaire :
Et le code de l'action :
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 class CommandeForm extends sfForm { public function configure() { // ........... foreach ($choices as $date => $c) { foreach($personnel as $p) { $personnelMenu = new PersonnelMenu(); $personnelMenu->id_personnel = $p->getId(); $w = new PersonnelMenuForm($personnelMenu); unset($w['created_at'], $w['updated_at']); $w->widgetSchema['id_personnel'] = new sfWidgetFormInputHidden(); $w->widgetSchema['id_menu'] = new sfWidgetFormChoice(array('expanded' => true, 'choices' => $c, 'renderer_options' => array('formatter' => array($this, 'formatter')))); $w->widgetSchema['id_menu']->setLabel($p->getNom()." ".$p->getPrenom()); $w->validatorSchema['id_menu'] = new sfValidatorString(array('required' => true)); $w->widgetSchema->addFormFormatter('Row', new sfWidgetFormSchemaFormatterRow($w->widgetSchema, $w->validatorSchema)); $w->widgetSchema->setFormFormatterName('Row'); $this->embedForm($date.'-'.$p->getId(), $w); $this->widgetSchema->setNameFormat('commande[%s]'); } } }
Effectivement, je n'ai pas de méthode save() dans la classe de formulaire. Mais ce qui me taraude, c'est que les formulaires auto générés ne l'ont pas non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public function executeCommand(sfWebRequest $request) { // ......... if($request->isMethod('post')){ $this->form->bind($request->getParameter('commande')); if ($this->form->isValid()){ $this->form->save(); $this->getUser()->setFlash('notice', 'The command has been passed.'); $this->redirect('@commande'); } } }
J'ai testé de l'ajouter mais rien n'y fait, j'ai testé de créer cette méthode dans une nouvelle classe (Commande.class.php) dans le modèle mais pas mieux.
Si vous avez une idée, je suis tout ouïe.
Partager