src/Form/SearchProType.php line 62

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.         // sort countries by name
  31.         $countries $options['countries'];
  32.         ksort($countriesSORT_LOCALE_STRING);
  33.         $builder
  34.             ->add('name',TextType::class, [
  35.                 'required' => false,
  36.                 'label'    => false,
  37.                 'attr' => [
  38.                     'placeholder' => 'form.looking_for_who'
  39.                 ]
  40.             ])
  41.             ->add('type'ChoiceType::class, [
  42.                 'required' => false,
  43.                 'label'    => false,
  44.                 'choices' => [
  45.                     'form.coach' => 'coach',
  46.                     'form.club' => 'club',
  47.                     'form.operator' => 'operator'
  48.                 ],
  49.                 'multiple' => true,
  50.                 'expanded' => true
  51.             ])
  52.             ->add('sports'EntityType::class, [
  53.                 'required' => false,
  54.                 'label'    => false,
  55.                 'class' => Sport::class,
  56.                 'query_builder' => function (EntityRepository $er) {
  57.                     return $er->createQueryBuilder('s')
  58.                             ->where('s.status = :status')
  59.                             ->setParameter('status''visible')
  60.                             ->orderBy('s.appearance''ASC');
  61.                 },
  62.                 'choice_label' => function ($sport) {
  63.                     return $this->translator->trans("sport_name." $sport->getSlug());
  64.                 },
  65.                 'multiple' => true,
  66.                 'expanded' => true
  67.             ])
  68.             ->add('languages'EntityType::class, [
  69.                 'class' => Language::class,
  70.                 'choice_label' => function ($language) {
  71.                         
  72.                     $locale $this->request->getLocale();
  73.                     return ucfirst(Languages::getName($language->getSlug(), $locale));
  74.                         
  75.                 },
  76.                 'expanded' => true,
  77.                 'multiple' => true,
  78.                 'required' => false,
  79.                 'label' => false,
  80.                 'attr' => [
  81.                     'multiple' => true
  82.                 ],
  83.             ])
  84.             ->add('country'ChoiceType::class, [
  85.                 'required' => false,
  86.                 'label'    => false,
  87.                 'choices' => $countries,
  88.                 'multiple' => false,
  89.                 'expanded' => true,
  90.                 'placeholder' => 'form.indifferent'
  91.             ])
  92.             ->add('hasLabels'CheckboxType::class, [
  93.                 'required' => false,
  94.                 'label'    => 'form.yes'
  95.             ])
  96.         ;
  97.     }
  98.     public function configureOptions(OptionsResolver $resolver)
  99.     {
  100.         $resolver->setDefaults([
  101.             'data_class' => SearchPro::class,
  102.             'method'           => 'get',
  103.             'csrf_protection'  => false
  104.         ]);
  105.         
  106.         $resolver->setRequired(array(
  107.             'countries',
  108.         ));
  109.     }
  110.     public function getBlockPrefix() {
  111.         return '';
  112.     }
  113. }