Symfony 6全局导航栏表单提交失效问题求助
解决Symfony导航栏表单提交无响应问题
问题根源
通过render(controller(...))渲染的导航栏表单,默认提交目标是当前页面的路由,而非searchForm方法对应的路由。提交表单时,请求发送到当前页面的控制器,searchForm作为子请求无法接收提交数据,导致判断表单提交与验证的代码逻辑不执行。
解决步骤
- 为
searchForm方法添加专属路由
在FrontController的searchForm方法上添加路由注解,指定唯一路由及允许的请求方法:
#[Route('/navbar-search', name: 'navbar_search', methods: ['GET', 'POST'])] public function searchForm(Request $request): Response { $searchForm = $this->createForm(NavbarFormType::class); $searchForm->handleRequest($request); if ($searchForm->isSubmitted() && $searchForm->isValid()) { $data = $searchForm->getData(); $search = $data['search']; return $this->redirectToRoute('search_results', [ 'search' => $search, ]); } return $this->render('front/search_form.html.twig', [ 'searchForm' => $searchForm, ]); }
- 修改表单模板,指定提交路径
在search_form.html.twig中,通过form_start的参数指定表单提交到上述路由:
{{ form_start(searchForm, {'action': path('navbar_search')}) }} {{ form_row(searchForm.search) }} {{ form_row(searchForm.submit) }} {{ form_end(searchForm) }}
调整完成后,表单提交时会直接请求navbar_search路由,searchForm方法就能正常接收并处理表单数据,完成跳转逻辑。
内容的提问来源于stack exchange,提问作者seba66500
相关产品推荐
相关产品推荐

