<?php
namespace App\Form;
use App\Entity\Age;
use App\Entity\Level;
use App\Entity\Sport;
use App\Entity\Language;
use App\Entity\SearchCourse;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Intl\Languages;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
class SearchCourseType extends AbstractType
{
private $translator;
protected $request;
public function __construct(TranslatorInterface $translator, RequestStack $requestStack)
{
$this->translator = $translator;
$this->request = $requestStack->getCurrentRequest();
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('place', HiddenType::class, [
'required' => false,
'label' => false,
])
->add('sports', EntityType::class, [
'required' => false,
'label' => false,
'class' => Sport::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('s')
->where('s.status = :status')
->setParameter('status', 'visible')
->orderBy('s.appearance', 'ASC');
},
'choice_label' => function ($sport) {
return $this->translator->trans("sport_name." . $sport->getSlug());
},
'multiple' => true,
'expanded' => true
])
->add('begin', TextType::class, [
'label' => false,
'required' => false,
'attr' => [
'class' => 'course-date',
'readonly' => true,
'autocomplete' => false
]
])
->add('ages', EntityType::class, [
'required' => false,
'label' => false,
'class' => Age::class,
'choice_label' => function ($age) {
return $this->translator->trans("age_name." . $age->getSlug());
},
'multiple' => true,
'expanded' => true
])
->add('levels', EntityType::class, [
'required' => false,
'label' => false,
'class' => Level::class,
'choice_label' => function ($level) {
return $this->translator->trans("level_name." . $level->getSlug());
},
'multiple' => true,
'expanded' => true
])
->add('languages', EntityType::class, [
'class' => Language::class,
'choice_label' => function ($language) {
$locale = $this->request->getLocale();
return ucfirst(Languages::getName($language->getSlug(), $locale));
},
'expanded' => true,
'multiple' => true,
'required' => false,
'label' => false,
'attr' => [
'multiple' => true
],
])
->add('search', HiddenType::class, [
'required' => false,
'attr' => [
'autocomplete' => 'off'
]
])
->add('hasLabels', CheckboxType::class, [
'required' => false,
'label' => 'form.yes'
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => SearchCourse::class,
'method' => 'get',
'allow_extra_fields' => true,
'csrf_protection' => false
]);
}
public function getBlockPrefix() {
return '';
}
}