src/EventSubscriber/Form/AddUtilisateurFieldByReseauSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Form;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityRepository;
  5. use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Form\FormEvent;
  8. use Symfony\Component\Form\FormEvents;
  9. class AddUtilisateurFieldByReseauSubscriber implements EventSubscriberInterface
  10. {
  11.     public static function getSubscribedEvents(): array
  12.     {
  13.         return [
  14.             FormEvents::PRE_SET_DATA => 'preSetData',
  15.             FormEvents::PRE_SUBMIT => 'preSubmit',
  16.         ];
  17.     }
  18.     public function preSetData(FormEvent $event)
  19.     {
  20.         $form $event->getForm();
  21.         $reseau $form->get('reseau')->getData();
  22.         $this->addField($form$reseau);
  23.     }
  24.     public function preSubmit(FormEvent $event)
  25.     {
  26.         $data $event->getData();
  27.         $form $event->getForm();
  28.         if (array_key_exists("reseau"$data)) {
  29.             $reseau $data["reseau"];
  30.             $this->addField($form$reseau);
  31.         }
  32.     }
  33.     private function addField(
  34.         $form,
  35.         $reseau
  36.     )
  37.     {
  38.         $form->add('utilisateur'EntityFilterType::class,
  39.             [
  40.                 'class' => User::class,
  41.                 'choice_label' =>
  42.                     function (
  43.                         User $user
  44.                     ) {
  45.                         return sprintf("%s %s"$user->getName(), $user->getFirstname());
  46.                     },
  47.                 'query_builder' =>
  48.                     function (
  49.                         EntityRepository $er
  50.                     ) use
  51.                     (
  52.                         $reseau
  53.                     ) {
  54.                         return $er->createQueryBuilder('u')
  55.                                   ->where('u.reseau = :reseau')
  56.                                   ->setParameter('reseau'$reseau)
  57.                                   ->orderBy("u.name"'ASC')
  58.                                   ->addOrderBy("u.firstname"'ASC');
  59.                     },
  60.             ]
  61.         );
  62.     }
  63. }