Bonjour,
J'ai un formulaire basé sur une entité Véhicule. Ce véhicule peut posséder des équipements de deux types différents. J'ai donc créer une entité Equipement qui possède un attribut qui détermine sont type :
Dans le formulaire d'encodage d'un véhicule, je voudrais présenter les différents équipements afin que l'utilisateur puisse cocher ceux qui sont présents dans le véhicule. Cependant, je voudrais que la présentation de ces équipements soit scindée en deux, en fonction des deux types.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 private $id; /** * @ORM\Column(type="string", length=255) */ private $equipment; /** * @ORM\Column(type="string", length=25) * @Assert\Choice({"Porteur", "Cellule"}) */ private $belonging;
Donc, dans mon repository lié à l'équipement, j'ai créé les fonctions qui me permettent de lister les équipement d'un type :
Dans le builder de mon formulaire, je sais comment lié le type entityType à ce filtre :
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 public function __construct(RegistryInterface $registry) { parent::__construct($registry, Equipment::class); } public function queryFindByBelonging($belonging) { $query = $this->createQueryBuilder('r') ->andWhere('r.belonging = :belonging') ->setParameter('belonging', $belonging); return $query; } public function findByBelonging(String $belonging) { return $this->createQueryBuilder('r') ->getQuery() ->getResult(); }
Cependant, je ne sais pas faire comment faire coexister le second contrôle ramenant l'autre type d'équipement qui lui, donnerait ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ... $belongingCarrier = 'Porteur'; ... $builder->add('equipments', EntityType::class, array('class' => 'App\Entity\Equipment', 'multiple' => true, 'expanded' => true, 'choice_label' => 'equipment', 'query_builder' => function(EquipmentRepository $er) use ($belongingCarrier) { return $er->queryFindByBelonging($belongingCarrier); } ) ) ...
J'ai tenté de ne pas effectuer le filtre dans mon builder mais dans mon template, mais je tombe sur une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ... $belongingCell = 'Cellule'; ... $builder->add('equipments', EntityType::class, array('class' => 'App\Entity\Equipment', 'multiple' => true, 'expanded' => true, 'choice_label' => 'equipment', 'query_builder' => function(EquipmentRepository $er) use ($belongingCell) { return $er->queryFindByBelonging($belongingCell); } ) ) ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 {% for equipment in formAdvert.vehicle.equipments if equipment.belonging == 'Porteur' %} {{ form_row(equipment.equipment) }} {% endfor %}Auriez-vous une idée?Neither the property "belonging" nor one of the methods "belonging()", "getbelonging()"/"isbelonging()"/"hasbelonging()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".
Merci d'avance pour votre aide.
Partager