src/Form/EventListener/AddUeFieldListener.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Form\EventListener;
  3. use App\Entity\AnneeAcademique;
  4. use App\Entity\NiveauFiliere;
  5. use App\Entity\Ue;
  6. use App\Repository\AffectationUeEcueRepository;
  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 AddUeFieldListener implements EventSubscriberInterface
  12. {
  13.     private AffectationUeEcueRepository $ueEcueRepository;
  14.     private AddEctFieldListener $addEctFieldListener;
  15.     public function __construct(AffectationUeEcueRepository $ueEcueRepositoryAddEctFieldListener $addEctFieldListener)
  16.     {
  17.         $this->ueEcueRepository $ueEcueRepository;
  18.         $this->addEctFieldListener $addEctFieldListener;
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             FormEvents::POST_SUBMIT => 'onPostSubmit',
  24.         ];
  25.     }
  26.     public function onPostSubmit(FormEvent $event)
  27.     {
  28.         $ues = [];
  29.         $form $event->getForm();
  30.         $parent $form->getParent();
  31.         /** @var AnneeAcademique $academique */
  32.         $academique $parent->get('academique')->getData();
  33.         /** @var NiveauFiliere $niveauFiliere */
  34.         $niveauFiliere $form->getData();
  35.         if ($academique != null && $niveauFiliere != null) {
  36.             $affectations $this->ueEcueRepository->getByYear(
  37.                 $academique,
  38.                 $niveauFiliere
  39.             );
  40.             foreach ($affectations as $affectation) {
  41.                 $ues[] = $affectation->getUe();
  42.             }
  43.         }
  44.         // create builder, so we can add the listener to ue field
  45.         $builder $parent
  46.             ->getConfig()
  47.             ->getFormFactory()
  48.             ->createNamedBuilder('ue'EntityType::class, null, [
  49.                 'class' => Ue::class,
  50.                 'attr' => [
  51.                     'data-controller' => 'tom',
  52.                     'required' => true
  53.                 ],
  54.                 'placeholder' => '-- choisir une option --',
  55.                 'choices' => $ues,
  56.                 'auto_initialize' => false
  57.             ])
  58.             ->addEventSubscriber($this->addEctFieldListener);
  59.         $parent->add($builder->getForm());
  60.     }
  61. }