Symfony 从查询参数中删除提交

Symfony 从查询参数中删除提交,symfony,Symfony,我有一张搜索表。问题是当我发布它时,它会为submit按钮创建一个变量 ?搜索=输入并提交= 我似乎不知道如何删除这个,只显示 ?搜索=键 有什么想法吗?谢谢 private function createSearchForm() { $builder = $this->get('form.factory')->createNamedBuilder(null, 'form',null, array('csrf_protection' => false))

我有一张搜索表。问题是当我发布它时,它会为submit按钮创建一个变量

?搜索=输入并提交=

我似乎不知道如何删除这个,只显示

?搜索=键

有什么想法吗?谢谢

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()
。但是对于我的情况,我不需要它。

我不认为在一种形式中,您可以使用两种方法提交)非常感谢您的回答!