src/Form/ModelType/Appointment/Subscriber/AppointmentCustomerSubscriber.php line 42
<?phpnamespace App\Form\ModelType\Appointment\Subscriber;use App\Autowire\EntityManagerTrait;use App\Entity\Customer;use App\Entity\Vehicle;use App\Form\ModelType\Appointment\Model\AppointmentModel;use App\Repository\CustomerRepository;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 AppointmentCustomerSubscriber 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{$vehicle = array_key_exists('vehicle', $preSubmitEvent->getData())? $this->getRepository(Vehicle::class)->find($preSubmitEvent->getData()['vehicle']): null;$customer = array_key_exists('customer', $preSubmitEvent->getData())? $this->getRepository(Customer::class)->find($preSubmitEvent->getData()['customer']): null;$this->addManagerField($preSubmitEvent->getForm(), $vehicle, $customer);}public function addFormTypeOnPostSetData(PostSetDataEvent $postSetDataEvent): void{/*** @var AppointmentModel $appointmentModel*/$appointmentModel = $postSetDataEvent->getData();$this->addManagerField($postSetDataEvent->getForm(), $appointmentModel->getVehicle(), $appointmentModel->getCustomer());}private function addManagerField(FormInterface $form, ?Vehicle $vehicle, ?Customer $customer){$form->add('customer', EntityType::class, ['class' => Customer::class,'label' => 'Responsable','query_builder' => function (CustomerRepository $repository) use ($vehicle) {return $repository->getQbCustomersByVehicle($vehicle);},'row_attr' => ['class' => 'col-md-12 d-none'],'attr' => ['data-dashboard-target' => 'customer','data-action' => 'change->dashboard#customerChanged'],'label_attr' => ['class' => 'form-label'],'choice_value' => function (?Customer $customer) {return $customer?->getId();},'choice_label' => function (?Customer $customer) {return $customer?->getFullName();},'placeholder' => 'Selectionner un responsable...','autocomplete' => true,'required' => true,'no_results_found_text' => 'Pas de responsable trouvé : <button type="button" class="btn btn-success">Ajouter un responsable</button>','no_more_results_text' => 'Pas de responsable trouvé : <button type="button" class="btn btn-success">Ajouter un responsable</button>',]);}}