Symfony 从查询参数中删除提交
我有一张搜索表。问题是当我发布它时,它会为submit按钮创建一个变量 ?搜索=输入并提交= 我似乎不知道如何删除这个,只显示 ?搜索=键 有什么想法吗?谢谢Symfony 从查询参数中删除提交,symfony,Symfony,我有一张搜索表。问题是当我发布它时,它会为submit按钮创建一个变量 ?搜索=输入并提交= 我似乎不知道如何删除这个,只显示 ?搜索=键 有什么想法吗?谢谢 private function createSearchForm() { $builder = $this->get('form.factory')->createNamedBuilder(null, 'form',null, array('csrf_protection' => false))
private function createSearchForm()
{
$builder = $this->get('form.factory')->createNamedBuilder(null, 'form',null, array('csrf_protection' => false))
->setAction($this->generateUrl('trips'))
->setMethod('GET')
->getForm()
->add('search', 'text', array('required' => false, 'label' => false))
->add('submit', 'submit')
;
return $builder;
}
所有具有
name
属性的表单字段都在查询字符串中。所以简单的方法就是在模板中手动呈现submit并省略名称。我认为使用POST for forms会更好
因此,我在下面向您解释如何使用POST实现相同的功能(包括永久链接到searchResult)。URL甚至会看起来更好:它不是?search=bla而是/search/bla
路线设置:
search:
path: /search/
defaults: { _controller: "AcmeDemoBundle:Search:searchRedirect" }
requirements: { _method: POST }
search_result:
path: /search/{search}
defaults: { _controller: "AcmeDemoBundle:Search:search" }
requirements: { _method: GET}
然后在searchRedirectAction(Request$Request)
中重定向到搜索结果
return $this->redirect(
$this->generateUrl('search_result', array(
'search'=>$request->get('search', '')
))
);
我的解决方法有点不同,因为我有很多表单需要这个功能 Symfony 3.x: 我创建了一个覆盖1个块的form_主题
{# app/Resources/views/twig/form_themes/overrides.html.twig #}
{%- block button_attributes -%}
id="{{ id }}" {% if type|default('button') != 'submit' %}name="{{ full_name }}"{% endif %}{% if disabled %} disabled="disabled"{% endif -%}
{{ block('attributes') }}
{%- endblock button_attributes -%}
然后在我的配置中:
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
form_themes:
- 'bootstrap_3_layout.html.twig'
- 'twig/form_themes/overrides.html.twig'
这将基本上从所有提交类型按钮中删除名称字段,因此不会包含在GET
请求的查询参数中
**这可能会产生一些意外的副作用,例如无法在提交按钮上运行
->isClicked()
。但是对于我的情况,我不需要它。我不认为在一种形式中,您可以使用两种方法提交)非常感谢您的回答!