Добрый вечер.
Есть форма на главной странице сайта, которая отправляет данные на страницу поиска.
Используется метод GET.
class Form extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setAction('/search')
->setMethod('get')
->setAttribute('name', '')
->add('region', Type\ChoiceType::class, [
'label' => false,
'choices' => array_flip($this->regions->assoc()),
'attr' => ['class' => 'form-select'],
'placeholder' => 'Край/Область'
])
->add('city', Type\ChoiceType::class, [
'label' => false,
'choices' => [],
'attr' => ['class' => 'form-select', 'disabled' => true],
'placeholder' => 'Город'
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Filter::class,
]);
}
}
В шаблоне
<div class="card">
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit" class="btn btn-success banner-form-btn">Показать</button>
{{ form_end(form) }}
</div>
Форма создаётся в SiteController, action формы ведёт на SearchController
/* SiteController */
public function index(Request $request): Response
{
$filter = new Frontend\Filter();
//$form = $this->createForm(Frontend\Form::class, $filter);
$form = $this->get('form.factory')->createNamed('', Frontend\Form::class, $filter);
$form->handleRequest($request);
return $this->render('app/site/index.html.twig', ['form' => $form->createView()]);
}
/* SearchController */
/**
* Class SearchController
* @package App\Controller
*
* @Route("/search", name="search")
*/
class SearchController extends AbstractController
{
/**
* @param string $region
* @param string $city
* @param Request $request
* @return Response
*
* @Route("/{region}/{city}", name="", methods={"GET"})
*/
public function index(string $region, string $city, Request $request): Response
{
/......./
return $this->render('app/site/search.html.twig', ['companies' => $companies, 'form' => $form->createView()]);
}
}
После отправки формы "теряется" маршрут, в результате ошибка:
No route found for "GET /search" (from "localhost:8080")
И в адресной строке такой адрес
http://localhost:8080/search?region=9d326bb2-96cd-4cd6-a3ea-508b4ade3c83&city=6e520d96-9559-4d67-9a90-a56e1defa1a1&_token=l5K7J4XGoU89zfo4gT6dGNh7VW-KXFAhvIvbVSfeyPY
Если на главной странице создать обычную ссылку и выполнить переход, то всё работает отлично, маршрут находится, данные выводятся, в адресной строке адрес, который нужен
http://localhost:8080/search/9d326bb2-96cd-4cd6-a3ea-508b4ade3c83/6e520d96-9559-4d67-9a90-a56e1defa1a1
Как решить данную проблему?
UPD.
В дальнейшем, вместо id в строку запроса будет подставляться slug из названий регионов и городов. Возможно при таком подходе заменить id на slug?