<?php
namespace App\Form;
use App\Entity\Sport;
use App\Entity\Language;
use App\Entity\SearchPro;
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\CountryType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
class SearchProType 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)
{
$countries = $options['countries'];
$builder
->add('name',TextType::class, [
'required' => false,
'label' => false,
'attr' => [
'placeholder' => 'form.looking_for_who'
]
])
->add('type', ChoiceType::class, [
'required' => false,
'label' => false,
'choices' => [
'form.coach' => 'coach',
'form.club' => 'club',
'form.operator' => 'operator'
],
'multiple' => true,
'expanded' => true
])
->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('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('country', ChoiceType::class, [
'required' => false,
'label' => false,
'choices' => $countries,
'multiple' => false,
'expanded' => true,
'placeholder' => 'form.indifferent'
])
->add('hasLabels', CheckboxType::class, [
'required' => false,
'label' => 'form.yes'
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => SearchPro::class,
'method' => 'get',
'csrf_protection' => false
]);
$resolver->setRequired(array(
'countries',
));
}
public function getBlockPrefix() {
return '';
}
}