Bonjour à tous,
J'ai crée un formulaire imbriqué suivant :
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 class CallCollectionType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('calls', 'collection', [ 'type' => new CallType(), 'allow_add' => true, 'by_reference' => false, ]) ; } public function getName() { return 'callcollection_form'; } }Donc le formulaire CallCollectionType ne correspond à aucune entité, en revanche il me permet de réceptionner une collection d'entités Call, ces mêmes entités que je souhaiterais donc enregistrer dans ma base de données.
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 class CallType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('startDate', 'datetime', array( 'widget' => 'single_text', 'format' => 'yyyy-MM-dd HH:mm:ss', )) ->add('endDate', 'datetime', array( 'widget' => 'single_text', 'format' => 'yyyy-MM-dd HH:mm:ss', )) ->add('rescheduledDate', 'datetime', array( 'widget' => 'single_text', 'format' => 'yyyy-MM-dd HH:mm:ss', )) ->add('callStatus') ->add('callStatusComment') ->add('doNotCallAnymore') ->add('company', null, array( 'class' => 'AppBundle:Company', 'property' => 'id' )) ; } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults([ 'data_class' => 'AppBundle\Entity\Call' ]); } public function getName() { return 'call_form'; } }
Malheureusement cela ne fonctionne pas comme prévu, je m'explique.
Voici le contrôleur:
Qui me retourne l'erreur suivante : Call to a member function setCaller() on a non-object
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 public function saveAnswersAction(Request $request) { $user = $this->getUser(); $form = $this->createForm(new CallCollectionType()); $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $caller = $em->getRepository('AppBundle:Caller')->getOneWithCurrentParticipationAssignment($user->getId()); $calls = $form->getData(); \Doctrine\Common\Util\Debug::dump($calls, 2); foreach ($calls as $call) { $call->setCaller($caller); $em->persist($call); } $em->flush(); return new JsonResponse([ 'status' => true, ]); } return new JsonResponse([ 'status' => false, ]);
Je vous montre le rendu du Doctrine dump() effectué sur $calls, qui est à mon goût fort étrange : array (size=1) 'calls' => array (size=1) 0 => string 'AppBundle\Entity\Call' (length=21)
Donc je n'ai pas réussi à récupérer des entités Call à l'aide de mon formulaire, où est mon erreur?
merci d'avance
Partager