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 :

    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $equipment;

    /**
     * @ORM\Column(type="string", length=25)
     * @Assert\Choice({"Porteur", "Cellule"})
     */
    private $belonging;

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.

Donc, dans mon repository lié à l'équipement, j'ai créé les fonctions qui me permettent de lister les équipement d'un type :

    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();
    }

Dans le builder de mon formulaire, je sais comment lié le type entityType à ce filtre :

...
        $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);
                                     }            
                                                                )
                 )
...

Cependant, je ne sais pas faire comment faire coexister le second contrôle ramenant l'autre type d'équipement qui lui, donnerait ceci :

...
        $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);
                                     }            
                                                                )
                 )
...

J'ai tenté de ne pas effectuer le filtre dans mon builder mais dans mon template, mais je tombe sur une erreur :

"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"."

Auriez-vous une idée?

Merci d'avance pour votre aide.

Aucune réponse