Symfony 4如何移除URL中的表单前缀?无需创建表单类
解决Symfony 4搜索表单URL参数前缀问题
嘿,这个场景我太熟悉了!Symfony 4确实移除了Symfony 3里的createNamedBuilder方法,但咱们不用慌,只需要一个小调整就能让URL参数变成你想要的样子——给表单设置一个空名称就行!
默认情况下,createFormBuilder会给表单自动加上一个默认名称(通常是form),所以提交后的参数会被嵌套在这个名称的数组里,也就是你看到的form[q]。要去掉这个前缀,只需要在创建表单时的选项里添加'name' => '':
$form = $this->createFormBuilder(array(), array( 'csrf_protection' => false, 'method' => 'GET', 'name' => '' // 这就是关键的一行! )) ->add('q', TextType::class, array( 'label' => false, )) ->getForm();
这样设置之后,表单提交时就不会给字段添加外层的前缀了,URL会直接变成/search?q=hello,完全符合你的需求,而且全程不用创建单独的表单类,完美适配你的开发方式。
另外补充一点:模板里渲染表单的逻辑不用改,正常使用{{ form_widget(form) }}或者其他表单渲染方法就可以,空名称不会影响表单的渲染和后端的数据绑定,你可以放心用。
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

