src/Filter/Front/GlobalSearch.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Filter\Front;
  3. use App\Enum\ScholarTrainingThematicEnum;
  4. use Spiriit\Bundle\FormFilterBundle\Filter\Doctrine\ORMQuery;
  5. use Spiriit\Bundle\FormFilterBundle\Filter\Form\Type\ChoiceFilterType;
  6. use Symfony\Component\Form\AbstractType;
  7. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  8. use Symfony\Component\Form\FormBuilderInterface;
  9. use Symfony\Component\OptionsResolver\OptionsResolver;
  10. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  11. class GlobalSearch extends AbstractType
  12. {
  13.     public function __construct(
  14.         private UrlGeneratorInterface $urlGenerator,
  15.     )
  16.     {
  17.     }
  18.     public function buildForm(FormBuilderInterface $builder, array $options): void
  19.     {
  20.         $builder->remove('thematic');
  21.         $builder
  22.             ->add('thematic'ChoiceFilterType::class, [
  23.                 'label' => false,
  24.                 'choices' => ScholarTrainingThematicEnum::getFormChoices(),
  25.                 'multiple' => true,
  26.                 'expanded' => false,
  27.                 'required' => false,
  28.                 'attr' => [
  29.                     'data-selektor' => true,
  30.                     'data-global-search-selektor' => true,
  31.                     'data-selektor-placeholder' => 'Rechercher une formation',
  32.                     'class' => 'd-none',
  33.                 ],
  34.                 'row_attr' => [
  35.                     'class' => 'row-thematics',
  36.                 ],
  37.             ])
  38.             ->add('name'HiddenType::class, [
  39.                 'label' => false,
  40.                 'required' => false,
  41.                 'apply_filter' => function(ORMQuery $filterQuery$field$values) {
  42.                     if (empty($values['value'])) {
  43.                         return null;
  44.                     }
  45.                     $expr $filterQuery->getExpr();
  46.                     $paramName sprintf('p_%s'str_replace('.''_'$field));
  47.                     $expression $expr->like($field':' $paramName);
  48.                     return $filterQuery->createCondition($expression, [
  49.                         $paramName => '%' $values['value'] . '%',
  50.                     ]);
  51.                 }
  52.             ])
  53.         ;
  54.     }
  55.     public function configureOptions(OptionsResolver $resolver): void
  56.     {
  57.         $resolver->setDefaults([
  58.             'csrf_protection' => false,
  59.             'method' => 'GET',
  60.             'action' => $this->urlGenerator->generate('search_form'),
  61.             'allow_extra_fields' => true,
  62.         ]);
  63.     }
  64.     public function getBlockPrefix(): string
  65.     {
  66.         return 'nellapp_global_search';
  67.     }
  68. }