<?php
namespace App\Form;
use App\Entity\Label;
use App\Entity\Style;
use App\Entity\Artist;
use App\Services\Search;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
class SearchType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('styles', EntityType::class, [
'required' => false,
'label' => 'forms.labels.styles',
'class' => Style::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('s')
->orderBy('s.name', 'ASC');
},
'multiple' => true,
'expanded' => true,
'attr' => [
'class' => 'text-capitalize d-flex flex-wrap',
]
])
->add('label', EntityType::class, [
'required' => false,
'label' => 'forms.labels.label',
'class' => Label::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('l')
->orderBy('l.name', 'ASC');
},
'attr' => [
'class' => 'text-capitalize w-100',
],
'placeholder' => 'forms.placeholders.select_option',
'empty_data' => '',
])
->add('artist', EntityType::class, [
'required' => false,
'label' => 'forms.labels.artist',
'class' => Artist::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('a')
->orderBy('a.name', 'ASC');
},
'attr' => [
'class' => 'text-capitalize w-100',
],
'placeholder' => 'forms.placeholders.select_option',
'empty_data' => '',
])
->add('year', IntegerType::class, [
'required' => false,
'label' => 'forms.labels.year',
'attr' => [
'min' => 1970,
'max' => (int)date('Y'),
'class' => 'w-100',
],
'empty_data' => '',
])
->add('q', TextType::class, [
'required' => false,
'label' => false,
'attr' => [
'class' => 'w-100',
'placeholder' => 'forms.placeholders.search_placeholder',
]
])
->add('inStock', CheckboxType::class, [
'required' => false,
'label' => 'forms.labels.in_stock',
])
->add('promo', CheckboxType::class, [
'required' => false,
'label' => 'forms.labels.promo',
])
->add('homeprod', CheckboxType::class, [
'required' => false,
'label' => 'forms.labels.home_prod',
])
->add('repress', CheckboxType::class, [
'required' => false,
'label' => 'forms.labels.repress',
])
->add('neuf', CheckboxType::class, [
'required' => false,
'label' => 'forms.labels.new',
])
->add('occasion', CheckboxType::class, [
'required' => false,
'label' => 'forms.labels.used',
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Search::class,
'method' => 'GET',
'csrf_protection' => false
]);
}
public function getBlockPrefix()
{
return '';
}
}