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 :
/**
* @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 :
{% 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
$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.