Salut à tous
J'ai fais un formulaire imbriqué qui me permet de créer un Ship et plusieurs Escales.
Lors de la création, ça marche super. Par contre, quand je veux éditer, il me sort cette erreur :
The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class ATE\MainBundle\Entity\Ship. You can avoid this error by setting the "data_class" option to "ATE\MainBundle\Entity\Ship" or by adding a view transformer that transforms an instance of class ATE\MainBundle\Entity\Ship to scalar, array or an instance of \ArrayAccess.
Et ce uniquement si mon Ship contient plusieurs Escales (=ShipDestination).
Pourtant, dans mon formulaire j'ai bien l'option data_class qui vaut'ATE\MainBundle\Entity\Ship'
Voici mon code
ShipType
ShipDestinationType
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 <?php namespace ATE\MainBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class ShipType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name', 'text', array('label'=>'Nom du navire', 'required'=>true)) ->add('company', 'entity', array('label'=>'Compagnie', 'required'=>true, 'class'=>'ATEMainBundle:Company', 'property'=>'name')) ->add('dest', 'entity', array('label'=>'Destination', 'required'=>true, 'class'=>'ATEMainBundle:Destination', 'property'=>'destination')) ->add('ets', 'date', array('label'=>'Date de départ consolidée (ETS)', 'widget'=>'single_text', 'format'=>'dd-MM-yyyy', 'required'=>true)) ->add('eta', 'date', array('label'=>"Date d'arrivée consolidée (ETA)", 'widget'=>'single_text', 'format'=>'dd-MM-yyyy', 'required'=>true)) ->add('turnoverSecurised', 'money', array('label'=>"Chiffre d'affaire sécurisé", 'currency'=>false, 'required'=>false)) ->add('turnover', 'money', array('label'=>"Chiffre d'affaire non sécurisé", 'currency'=>false, 'required'=>false)) ->add('shipDestination', 'collection', array('type'=>new ShipDestinationType(), 'options' => array('data_class'=>'ATE\MainBundle\Entity\ShipDestination'), 'allow_add'=>true, 'allow_delete'=>true, 'label'=>'Escales')) ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'ATE\MainBundle\Entity\Ship' )); } /** * @return string */ public function getName() { return 'ate_mainbundle_ship'; } }
Une petite idée ??
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
31
32
33
34
35
36
37
38
39
40
41 class ShipDestinationType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('destination', 'entity', array('label'=>'Destination', 'class'=>'ATEMainBundle:Destination', 'property'=>'destination')) ->add('date', 'date', array('label'=>'Date d\'escale', 'widget'=>'single_text', 'format'=>'dd-MM-yyyy', 'required'=>true, 'attr'=>array('class'=>'calendar'))) ->add('ship', 'hidden') ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'ATE\MainBundle\Entity\ShipDestination' )); } /** * @return string */ public function getName() { return 'ate_mainbundle_shipdestination'; } }
Partager