Bonjour,

Je dois effectuer l'enregistrement d'une annonce en deux formulaires consécutifs : le premier formulaire contient différentes informations, notamment différentes périodes dont le nombre est indéfini à la base car l'utilisateur peut en ajouter ou en supprimer via du javascript, et un second formulaire qui se base sur les périodes du premier formulaire. Pour ce faire, voici comment j'ai construit la fonction d'appel dans mon controller :

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
 
 
    /**
     *  @Route("/road_trip/newAdvert", name="road_trip_createAdvert")
     *  @Route("/road_trip/{id}/editAdvert", name="road_trip_editAdvert")
     */
 
    public function advertForm(Advert $advert = null, Request $request, ObjectManager $manager){
 
        $newAdvert = false;
        $step = 0;
 
        if (!$advert) 
        {
            $newAdvert = true;
            $advert = new Advert();
...
 
        }
...
 
        if (!isset($form)) {
            $form = $this->createForm(AdvertType::class, $advert);
            $form->handleRequest($request);
        }
 
        if ($form->isSubmitted() && $form->isValid()) 
        {
            $error = null;
 
            //Chek if is the first or the second step of the record form
            if ($form->get('step')->getData() == 1) {
 
                $step = 1;
...
                $unique_seasons = array_unique($seasons);
                $numberPrices = count($unique_seasons);
 
                for ($i=0; $i < $numberPrices; $i++) { 
 
                    $durations = $this->getParameter('periods_durations');
 
                    for ($j=0; $j < count($durations); $j++) { 
                        $price = new Price;
                        $price->setDuration($durations[$j]);
                        $price->setSeason($unique_seasons[$i]);
                        $advert->addPrice($price);
                    }
                }
 
                if (null == $error) {
                    $form = $this->createForm(PricesAdvertType::class, $advert);
                    $form->handleRequest($request);
                }
 
            }
 
            //Second step management 
            if ($form->get('step')->getData() == 2) { 
 
                $step = 2;
                $prices = $advert->getPrices();
 
                foreach ($prices as $price) 
                {
 
                    $price->setAdvert($advert);
 
                }
 
                $manager->persist($advert);
                $manager->flush();
                //echo "Dans step2";
 
                return $this->redirectToRoute('road_trip_adverts');
 
            }
 
 
        }     
 
        if ($step == 0) {
            return $this->render('road_trip/createAdvert.html.twig', ['formAdvert' => $form->createView(), 'editMode' => $advert->getId() !== null]);
        }
        else {
            return $this->render('road_trip/createPricesAdvert.html.twig', ['formPricesAdvert' => $form->createView(), 'editMode' => $advert->getId() !== null]);
        }
 
    }
Après la soumission du premier formulaire, le second est bien appelé mais j'obtiens cette erreur :

Neither the property "prices" nor one of the methods "prices()", "getprices()"/"isprices()"/"hasprices()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".
Cette erreur se produit à la ligne suivante dans mon second template :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for price in formPricesAdvert.prices %}
Apparemment, mon objet "$advert" ne serait pas correctement transmis à mon template, comme je m'y serais attendu avec la ligne suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$form = $this->createForm(PricesAdvertType::class, $advert);
Je ne comprends pas où se situe mon erreur.

Quelqu'un aurait une idée?

Merci d'avance pour votre aide.