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 :
Après la soumission du premier formulaire, le second est bien appelé mais j'obtiens cette erreur :
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]); } }
Cette erreur se produit à la ligne suivante dans mon second template :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".
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 {% for price in formPricesAdvert.prices %}Je ne comprends pas où se situe mon erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $form = $this->createForm(PricesAdvertType::class, $advert);
Quelqu'un aurait une idée?
Merci d'avance pour votre aide.
Partager