src/Form/SearchProType.php line 21

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