<?php
namespace App\Form;
use App\Data\SearchData;
use App\Entity\Category;
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\NumberType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class SearchForm extends AbstractType
{
private $translator;
private $requestStack;
private $session;
public function __construct(TranslatorInterface $translator,RequestStack $requestStack)
{
$this->setTranslator($translator);
$this->requestStack = $requestStack;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
// $translator TranslatorInterface;
// todo translation dans le controller
// $request = $this->requestStack->getCurrentRequest();
// $locale = $request->getLocale();
$this->session = $this->getRequestStack()->getSession();
$locale = $this->getSession()->get('_locale', 'en');
// dd($locale);
$rechercherlabel = $this->getTranslator()->trans('rechercher'. $locale);
$catlabel = $this->getTranslator()->trans('category'. $locale);
$prixminlabel = $this->getTranslator()->trans('prixmini'. $locale);
$prixmaxlabel = $this->getTranslator()->trans('prixmax'. $locale);
$enpromolabel = $this->getTranslator()->trans('enpromo'. $locale);
$rechercherlabel = $this->getTranslator()->trans('rechercher'. $locale);
$builder
->add('q',TextType::class,[
'label' => false,
'required' => false,
'attr' => [
'placeholder' => $rechercherlabel,
'class' => 'form-control',
]
])
->add('categories',EntityType::class, [
'label' => false,
'required' => false,
'class' => Category::class,
'expanded' =>false,
'mapped' => false,
'choice_label' => 'nom',
'placeholder' => $catlabel,
'attr' => ['class' => 'form-control']
])
//pour image 'constraints' => new File([
// 'maxSize' => '1024K',
// mimeType
// ]
->add('min',NumberType::class, [
'label' => false,
'required' => false,
'attr' => [
'placeholder' => $prixminlabel,
'class' => 'form-control prix-width'
]
])
->add('max',NumberType::class, [
'label' => false,
'required' => false,
'attr' => [
'placeholder' => $prixmaxlabel,
'class' => 'form-control prix-width'
]
])
->add('promo', CheckboxType::class, [
'label' => $enpromolabel,
'required' => false,
'mapped' => false,
'attr' => [
'class' => 'checkbox-wrapper '
]
])
->add('submit', SubmitType::class, [
'label' => $rechercherlabel,
'attr' => [
'class' => 'btn btn-default btn-light '
]
// 'label' => 'Search',
])
;
// add submit button
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => SearchData::class,
'method' => 'GET',
'csrf_protection' => false
]);
}
// rendre mon url plus propre
public function getBlockPrefix(){
return '';
}
/**
* Get the value of translator
*/
public function getTranslator()
{
return $this->translator;
}
/**
* Set the value of translator
*
* @return self
*/
public function setTranslator($translator)
{
$this->translator = $translator;
return $this;
}
/**
* Get the value of session
*/
public function getSession()
{
return $this->session;
}
/**
* Get the value of requestStack
*/
public function getRequestStack()
{
return $this->requestStack;
}
/**
* Set the value of requestStack
*
* @return self
*/
public function setRequestStack($requestStack)
{
$this->requestStack = $requestStack;
return $this;
}
}