Bonjour,

J'ai un formulaire d'encodage de données d'assurance et de prix qui n'est pas basé sur une entité :

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,
        ]);
    }
}
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
 
<?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,
        ]);
    }
}
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
 
<?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 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
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]);        
    }
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
    {% 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 %}
Est-ce quelqu'un aurait une idée sur la manière de procéder?

Merci d'avance pour votre aide.