src/Form/ModelType/Customer/Create/Subscriber/CustomerVehicleSubscriber.php line 54
<?phpdeclare(strict_types=1);namespace App\Form\ModelType\Customer\Create\Subscriber;use App\Autowire\EntityManagerTrait;use App\Entity\Company;use App\Entity\Enum\CustomerTypeEnum;use App\Entity\Vehicle;use App\Repository\CompanyRepository;use App\Repository\VehicleRepository;use Symfony\Bridge\Doctrine\Form\Type\EntityType;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\Form\Event\PostSetDataEvent;use Symfony\Component\Form\Event\PreSubmitEvent;use Symfony\Component\Form\FormEvents;use Symfony\Component\Form\FormInterface;class CustomerVehicleSubscriber implements EventSubscriberInterface{use EntityManagerTrait;public static function getSubscribedEvents(): array{return [FormEvents::PRE_SUBMIT => 'addFormTypeOnPreSubmit',FormEvents::POST_SET_DATA => 'addFormTypeOnPostSetData',];}public function addFormTypeOnPreSubmit(PreSubmitEvent $preSubmitEvent): void{$type = array_key_exists('customerType', $preSubmitEvent->getData())? $preSubmitEvent->getData()['customerType']: null;$this->addVehicleField(form: $preSubmitEvent->getForm(),vehicles: function (VehicleRepository $repository) {return $repository->getQbAvailableVehicles();});if ($type === CustomerTypeEnum::ENTERPRISE->name) {$this->addCompanyField(form: $preSubmitEvent->getForm(),companies: function (CompanyRepository $repository) {return $repository->getQbAllSocialReason();});}}public function addFormTypeOnPostSetData(PostSetDataEvent $postSetDataEvent): void{$this->addVehicleField($postSetDataEvent->getForm());$this->addCompanyField($postSetDataEvent->getForm());}private function addVehicleField(FormInterface $form, callable $vehicles = null): void{$opts = ['class' => Vehicle::class,'required' => false,'label' => 'Véhicule','placeholder' => 'Selectionner un véhicule...','choice_label' => 'matriculation','attr' => ['data-customer-target' => 'vehicle'],'autocomplete' => true];if ($vehicles !== null) {$opts['query_builder'] = $vehicles;} else {$opts['choices'] = [];}$form->add('vehicle', EntityType::class, $opts);}private function addCompanyField(FormInterface $form, callable $companies = null): void{$opts = ['class' => Company::class,'label' => 'Entreprise','required' => true,'placeholder' => 'Selectionner une entreprise...','choice_label' => 'socialReason','row_attr' => ['class' => 'd-none',],'label_attr' => ['class' => 'required'],'attr' => ['data-customer-target' => 'company'],'autocomplete' => true,];if ($companies !== null) {$opts['query_builder'] = $companies;} else {$opts['choices'] = [];}$form->add('company', EntityType::class, $opts);}}