src/Form/SearchProjetType.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Commune;
  4. use App\Entity\Devise;
  5. use App\Entity\EnvIntervention;
  6. use App\Entity\Gouvernorat;
  7. use App\Entity\ModExecution;
  8. use App\Entity\Partenaire;
  9. use App\Entity\Programme;
  10. use App\Entity\Status;
  11. use Doctrine\ORM\EntityRepository;
  12. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  13. use Symfony\Component\Form\AbstractType;
  14. use Symfony\Component\Form\Extension\Core\Type\DateType;
  15. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  16. use Symfony\Component\Form\FormBuilderInterface;
  17. use Symfony\Component\Form\FormEvent;
  18. use Symfony\Component\Form\FormEvents;
  19. use Symfony\Component\Form\FormInterface;
  20. use Symfony\Component\OptionsResolver\OptionsResolver;
  21. class SearchProjetType extends AbstractType
  22. {
  23.     public function buildForm(FormBuilderInterface $builder, array $options): void
  24.     {
  25.         $builder
  26.             ->add('partenaire'EntityType::class, [
  27.                 'class' => Partenaire::class,
  28.                 'label' => 'partenaire',
  29.                 'choice_label' => 'nomFr',
  30.                 'mapped' => false,
  31.                 'required' => false,
  32.                 'placeholder' => 'Séléctionnez partenaire',
  33.                 'attr' => [
  34.                     'class' => 'form-select select2',
  35.                 ],
  36.             ])
  37.             ->add('programme'EntityType::class, [
  38.                 'class' => Programme::class,
  39.                 'label' => 'programme',
  40.                 'choice_label' => 'nomFr',
  41.                 'mapped' => false,
  42.                 'required' => false,
  43.                 'placeholder' => 'Séléctionnez programme',
  44.                 'attr' => [
  45.                     'class' => 'form-select select2',
  46.                 ],
  47.             ])
  48.             ->add('gouvernorat'EntityType::class, [
  49.                 'class' => Gouvernorat::class,
  50.                 'mapped' => false,
  51.                 'required' => false,
  52.                 'label' => 'gouvernorat',
  53.                 'query_builder' => function (EntityRepository $er) {
  54.                     return $er->createQueryBuilder('u')->orderBy('u.nomFr''ASC');
  55.                 },
  56.                 'choice_label' => 'nomFr',
  57.                 'placeholder' => 'Séléctionnez gouvernorat',
  58.                 'attr' => [
  59.                     'class' => 'form-select select2',
  60.                 ],
  61.             ])
  62.             ->add('communes'EntityType::class, [
  63.                 'class' => Commune::class,
  64.                 'label' => 'Commune',
  65.                 'query_builder' => null,
  66.                 'choice_label' => 'nomFr',
  67.                 'multiple' => true,
  68.                 'mapped' => false,
  69.                 'required' => false,
  70.                 'placeholder' => 'Séléctionnez commune',
  71.                 'attr' => [
  72.                     'multiple' => true,
  73.                     'class' => 'form-select select2',
  74.                 ],
  75.             ])
  76.             ->add('date')
  77.             ->add('budget')
  78.             ->add('envIntervention'EntityType::class, [
  79.                 'class' => EnvIntervention::class,
  80.                 'label' => 'Env Intervention',
  81.                 'choice_label' => 'nomFr',
  82.                 'mapped' => false,
  83.                 'required' => false,
  84.                 'placeholder' => 'Séléctionnez Env Intervention',
  85.                 'attr' => [
  86.                     'class' => 'form-select select2',
  87.                 ],
  88.             ])
  89.             ->add('modExecution'EntityType::class, [
  90.                 'class' => ModExecution::class,
  91.                 'label' => 'Mod Execution',
  92.                 'choice_label' => 'nomFr',
  93.                 'mapped' => false,
  94.                 'required' => false,
  95.                 'placeholder' => 'Séléctionnez Mod Execution',
  96.                 'attr' => [
  97.                     'class' => 'form-select select2',
  98.                 ],
  99.             ]);
  100.         $builder->get('gouvernorat')->addEventListener(
  101.             FormEvents::POST_SUBMIT,
  102.             function (FormEvent $event) {
  103.                 $form $event->getForm();
  104.                 $this->addComunesField($form->getParent(), $form);
  105.             }
  106.         );
  107.         $builder->get('partenaire')->addEventListener(
  108.             FormEvents::POST_SUBMIT,
  109.             function (FormEvent $event) {
  110.                 $form $event->getForm();
  111.                 $this->addProgrammeField($form->getParent(), $form);
  112.             }
  113.         );
  114.     }
  115.     private function addComunesField(FormInterface $form$data)
  116.     {
  117.         if (!empty($data->getData())) {
  118.             $gouv $data->getData();
  119.             $form->add('communes'EntityType::class, [
  120.                 'class' => Commune::class,
  121.                 'label' => 'Commune',
  122.                 'multiple' => true,
  123.                 'required' => false,
  124.                 'mapped' => false,
  125.                 'placeholder' => 'Séléctionnez commune',
  126.                 'attr' => [
  127.                     'multiple' => true,
  128.                     'class' => 'form-select select2',
  129.                 ],
  130.                 'query_builder' => function (EntityRepository $er) use ($gouv) {
  131.                     return $er->createQueryBuilder('f')->where('f.gouvernorat=:c')->setParameter('c'$gouv->getId())->orderBy('f.nomFr''ASC');
  132.                 },
  133.                 'choice_label' => function (Commune $commune) {
  134.                     return $commune->getNomFr();
  135.                 },
  136.             ]);
  137.         }
  138.     }
  139.     private function addProgrammeField(FormInterface $form$data)
  140.     {
  141.         if (!empty($data->getData())) {
  142.             $part $data->getData();
  143.             $form->add('programme'EntityType::class, [
  144.                 'required' => false,
  145.                 'class' => Programme::class,
  146.                 'label' => 'Programme',
  147.                 'multiple' => false,
  148.                 'mapped' => true,
  149.                 'placeholder' => 'Séléctionnez un programme',
  150.                 'attr' => [
  151.                     'multiple' => false,
  152.                     'class' => 'form-select select2',
  153.                 ],
  154.                 'query_builder' => function (EntityRepository $er) use ($part) {
  155.                     return $er->createQueryBuilder('f')->where('f.partenaireId=:c')->setParameter('c'$part->getId())->orderBy('f.nomFr''ASC');
  156.                 },
  157.                 'choice_label' => function (Programme $programme) {
  158.                     return $programme->getNomFr();
  159.                 },
  160.             ]);
  161.         }
  162.     }
  163.     public function configureOptions(OptionsResolver $resolver): void
  164.     {
  165.         $resolver->setDefaults([
  166.             // Configure your form options here
  167.         ]);
  168.     }
  169. }