src/Form/SearchCourseType.php line 89

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Age;
  4. use App\Entity\Level;
  5. use App\Entity\Sport;
  6. use App\Entity\Language;
  7. use App\Entity\SearchCourse;
  8. use Doctrine\ORM\EntityRepository;
  9. use Symfony\Component\Intl\Languages;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\FormBuilderInterface;
  12. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\OptionsResolver\OptionsResolver;
  15. use Symfony\Contracts\Translation\TranslatorInterface;
  16. use Symfony\Component\Form\Extension\Core\Type\TextType;
  17. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  18. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  19. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  20. class SearchCourseType extends AbstractType
  21. {
  22.     private $translator;
  23.     protected $request;
  24.     public function __construct(TranslatorInterface $translatorRequestStack $requestStack)
  25.     {
  26.         $this->translator $translator;
  27.         $this->request $requestStack->getCurrentRequest();
  28.     }
  29.     public function buildForm(FormBuilderInterface $builder, array $options)
  30.     {        
  31.         $builder
  32.             ->add('place'HiddenType::class, [
  33.                 'required' => false,
  34.                 'label'    => false,
  35.             ])
  36.             ->add('sports'EntityType::class, [
  37.                 'required' => false,
  38.                 'label'    => false,
  39.                 'class' => Sport::class,
  40.                 'query_builder' => function (EntityRepository $er) {
  41.                     return $er->createQueryBuilder('s')
  42.                             ->where('s.status = :status')
  43.                             ->setParameter('status''visible')
  44.                             ->orderBy('s.appearance''ASC');
  45.                 },
  46.                 'choice_label' => function ($sport) {
  47.                     return $this->translator->trans("sport_name." $sport->getSlug());
  48.                 },
  49.                 'multiple' => true,
  50.                 'expanded' => true
  51.             ])
  52.             ->add('begin'TextType::class, [
  53.                 'label' => false,
  54.                 'required' => false,
  55.                 'attr' => [
  56.                     'class' => 'course-date',
  57.                     'readonly' => true,
  58.                     'autocomplete' => false
  59.                 ]
  60.             ])
  61.             ->add('ages'EntityType::class, [
  62.                 'required' => false,
  63.                 'label'    => false,
  64.                 'class' => Age::class,
  65.                 'choice_label' => function ($age) {
  66.                     return $this->translator->trans("age_name." $age->getSlug());
  67.                 },
  68.                 'multiple' => true,
  69.                 'expanded' => true
  70.             ])
  71.             ->add('levels'EntityType::class, [
  72.                 'required' => false,
  73.                 'label'    => false,
  74.                 'class' => Level::class,
  75.                 'choice_label' => function ($level) {
  76.                     return $this->translator->trans("level_name." $level->getSlug());
  77.                 },
  78.                 'multiple' => true,
  79.                 'expanded' => true
  80.             ])
  81.             ->add('languages'EntityType::class, [
  82.                 'class' => Language::class,
  83.                 'choice_label' => function ($language) {
  84.                         
  85.                     $locale $this->request->getLocale();
  86.                     return ucfirst(Languages::getName($language->getSlug(), $locale));
  87.                         
  88.                 },
  89.                 'expanded' => true,
  90.                 'multiple' => true,
  91.                 'required' => false,
  92.                 'label' => false,
  93.                 'attr' => [
  94.                     'multiple' => true
  95.                 ],
  96.             ]) 
  97.             ->add('search'HiddenType::class, [
  98.                 'required' => false,
  99.                 'attr' => [
  100.                     'autocomplete' => 'off'
  101.                 ]
  102.             ])
  103.             ->add('hasLabels'CheckboxType::class, [
  104.                 'required' => false,
  105.                 'label'    => 'form.yes'
  106.             ])
  107.         ;
  108.     }
  109.     public function configureOptions(OptionsResolver $resolver)
  110.     {
  111.         $resolver->setDefaults([
  112.             'data_class' => SearchCourse::class,
  113.             'method'           => 'get',
  114.             'allow_extra_fields' => true,
  115.             'csrf_protection'  => false
  116.         ]);
  117.     }
  118.     public function getBlockPrefix() {
  119.          return '';
  120.     }
  121. }