src/Filter/Front/GlobalSearch.php line 14

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. }