I try to define values in my search form, so that when user comes back to the form, he retrieves previous values he entered. I tried this, but it seems it's not the solution because I don't the results as expected.
How can I retrieve values previously entered in my search form ?
Thank you for your help.
search.html.twig
{% extends 'base.html.twig' %}
{% block title %}Liste des sorties et des activités !{% endblock %}
{% block main %}
{{ form_start(form) }}
<p>Où souhaites-tu faire une sortie ou une activité ?</p>
{{ form_widget(form.bigcity, {'attr' : {'class' : 'mb-3'}, 'value' : app.session.get('bigcity.name')} ) }}
<p>Quel type de sortie ou d’activité t’intéresse ?</p>
{{ form_widget(form.category, {'attr' : {'class' : 'mb-3'}, 'value' : app.session.get('category.title')} ) }}
{{ form_widget(form.save, {'label': 'Je valide', 'attr' : {'class' : 'btn'}} ) }}
{{ form_end(form) }}
{% endblock %}
SearchType.php
<?php
namespace App\Form;
use App\Entity\BigCity;
use App\Entity\Categories;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class SearchType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('bigcity', EntityType::class, [
'class' => BigCity::class,
'choice_label' => 'name',
'placeholder' => 'Sélectionne une grande ville',
])
->add('category', EntityType::class, [
'class' => Categories::class,
'choice_label' => 'image',
'expanded' => true,
'multiple' => false,
])
->add('save', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null
]);
}
}
EventsController.php
<?php
namespace App\Controller;
use App\Form\SearchType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class EventsController extends AbstractController
{
#[Route('/search', name: 'search')]
public function search(Request $request, SessionInterface $sessionInterface)
{
$data = $request->query->all();
$sessionFormData = $sessionInterface->get('data');
$form = $this->createForm(SearchType::class, $data);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$sessionInterface->set('data', $data);
return $this->render('front/events.html.twig', $data);
}
return $this->renderForm('front/search.html.twig', [
'form' => $form
]);
}
