Bonjour,
Je sais que des questions similaires ont déjà été posé mais je n'ai pas trouvé de réponse.
Ma structure :
Une classe qui contient des horaires :
Classe horaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Personne { /** * @ORM\ManyToMany(targetEntity="Horaire", cascade={"persist"}) */ protected $horaires; }
Avec les formulaires appropriés :
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 class Horaire { /** * @ORM\Column(type="integer") */ private $jourSemaine; /** * @ORM\Column(type="time", nullable="true") */ private $ouverture; /** * @ORM\Column(type="time", nullable="true") */ private $fermeture; }
Jusqu'ici rien de compliquer.
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 class PersonneForm extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('horaires', 'collection', array('type' => new HoraireForm(), 'prototype' => false, 'allow_add' => false)); } } class HoraireForm extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('jourSemaine', 'hidden'); $builder->add('ouverture', 'time', array('widget' => 'single_text', 'input' => 'string', 'required' => false)); $builder->add('fermeture', 'time', array('widget' => 'single_text', 'input' => 'string', 'required' => false)); } }
Lors de l'instanciation du formulaire, la classe Personne contient un array de 14 Horaire (pour faire les jours de le semaine).
Le formulaire est bien instancié.
Le problème arrive au moment de la validation du formulaire : "This form should not contain extra fields".
Le bind du formulaire :
Le problème vient du champs horaires, si je le retire le formulaire est bien validé, sinon il n'est pas validé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $request = Request::createFromGlobals(); $personne = new Personne(); $form = $this->get('form.factory')->create(new PersonneForm(), $personne); $form->bindRequest($request); if($form->isValid()) ...
Pour l'affichage du formulaire j'utilise twig et j'affiche horaire avec form_widget.
J'ai essaye de ne laisser que la propriété jourSemaine dans le formulaire des horaires, cela ne change rien.
J'ai fais un var_dump de $_GET pour vérifier les informations passé, il y a bien mes 14 Horaire dans un array 'horaires'.
Si vous avez une idée du problème ?
Merci d'avance.
Partager