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';
    }
}
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';
    }
}
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.

Malheureusement cela ne fonctionne pas comme prévu, je m'explique.
Voici le contrôleur:

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,
        ]);
Qui me retourne l'erreur suivante : Call to a member function setCaller() on a non-object

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