Bonjour,
J'ai un formulaire d'encodage de données d'assurance et de prix qui n'est pas basé sur une entité :
Ce formulaire embarque donc deux autres forlulaires :
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 <?php namespace App\Form; use App\Form\InsuranceType; use App\Form\InsurancePriceType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\Extension\Core\Type\CollectionType; class CostsType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('insurance', InsuranceType::class) ->add('insurancePrices', CollectionType::class, array('entry_type' => InsurancePriceType::class,)) ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => null, ]); } }
et
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 <?php namespace App\Form; use App\Entity\Insurance; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class InsuranceType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('included') ->add('deductible') ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Insurance::class, ]); } }
Dans mon controller, j'initialise l'assurance et les prix avant d'appeler le formulaire principal :
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 <?php namespace App\Form; use App\Entity\InsurancePrice; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class InsurancePriceType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('price') ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => InsurancePrice::class, ]); } }
Dans mon template, après avoir affiché les inputs liés à l'assurance (ce qui fonctionne correctement), je voudrais afficher, pour chaque durée, un input pour encoder le prix. Cependant, je ne sais pas comment réaliser ceci à l'intérieur des boucles que j'ai déjà préparé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
47
48
49 /** * @Route("/road_trip/{id}/costsManagement", name="road_trip_costsManagement") */ public function costsForm(Advert $advert = null, Request $request, ObjectManager $manager){ $insurance = $advert->getInsurance(); if (! $insurance) { $insurance = new Insurance(); $advert->setInsurance($insurance); $prices = $advert->getPrices(); foreach ($prices as $price) { $durations[] = $price->getDuration(); } $unique_durations = array_unique($durations); foreach ($unique_durations as $unique_duration) { $insurancePrice = new InsurancePrice(); $insurancePrice->setDuration($unique_duration); $insurance->addInsurancePrice($insurancePrice); } } $insurancePrices = $insurance->getInsurancePrices(); $formCosts = $this->createForm(CostsType::class); $formCosts->handleRequest($request); if ($formCosts->isSubmitted() && $formCosts->isValid()) { /* $manager->persist($advert); $manager->flush(); return $this->redirectToRoute('road_trip_vehicleManagement', array('id' => $advert->getId())); */ } return $this->render('road_trip/createCosts.html.twig', ['formCosts' => $formCosts->createView(), 'unique_durations' => $unique_durations, 'insurancePrices' => $insurancePrices, 'editMode' => $insurance->getId() !== null]); }
Est-ce quelqu'un aurait une idée sur la manière de procéder?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 {% for unique_duration in unique_durations %} //Pour chaque durée {% for insurancePrice in insurancePrices %} //Pour chaque prix initialisé dans mon controller {% if insurancePrice.duration.id == unique_duration.id %} //Si la durée affectée au prix correspond à la durée en cours C'est ici que je dois ajouter mon input "price", mais je ne sais pas comment procéder {% endif %} {% endfor %} {% endfor %}
Merci d'avance pour votre aide.
Partager