src/EventSubscriber/Form/AddUtilisateurAssociesFieldByValideurSubscriber.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\Form;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Doctrine\ORM\EntityRepository;
  6. use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\EntityFilterType;
  7. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Form\FormEvent;
  10. use Symfony\Component\Form\FormEvents;
  11. class AddUtilisateurAssociesFieldByValideurSubscriber implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var EntityManagerInterface
  15.      */
  16.     private $entityManager;
  17.     public function __construct(EntityManagerInterface $entityManager)
  18.     {
  19.         $this->entityManager $entityManager;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             FormEvents::PRE_SET_DATA => 'preSetData',
  25.             FormEvents::PRE_SUBMIT => 'preSubmit',
  26.         ];
  27.     }
  28.     public function preSetData(FormEvent $event)
  29.     {
  30.         $form $event->getForm();
  31.         $valideur $form->get('valideur')->getData();
  32.         $this->addFieldUtilisateur($form$valideur);
  33.     }
  34.     public function preSubmit(FormEvent $event)
  35.     {
  36.         $data $event->getData();
  37.         $form $event->getForm();
  38.         if (array_key_exists("valideur"$data)) {
  39.             $valideur $data["valideur"];
  40.             $this->addFieldUtilisateur($form$valideur);
  41.         }
  42.     }
  43.     private function addFieldUtilisateur(
  44.         $form,
  45.         $valideurID
  46.     )
  47.     {
  48.         $valideur null;
  49.         if($valideurID){
  50.             $valideur $this->entityManager->getRepository(User::class)->findOneBy(["id" => $valideurID]);
  51.         }
  52.         if($valideur){
  53.             $form->add('utilisateursAssocies'EntityType::class,
  54.                 [
  55.                     'class' => User::class,
  56.                     'choice_label' => 'nameFirstname',
  57.                     'required' => false,
  58.                     'empty_data' => null,
  59.                     'label' => 'app.statistique.utilisateursAssocies',
  60.                     'query_builder' => function (
  61.                         EntityRepository $er
  62.                     ) use
  63.                     (
  64.                         $valideur
  65.                     ) {
  66.                         return $er->getUserForValideurQuery($valideur);
  67.                     },
  68.                 ]
  69.             );
  70.         }
  71.     }
  72. }