从查询参数中删除提交

时间:2014-11-07 07:55:56

标签: symfony

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

搜索=键&安培;提交=

我似乎无法弄清楚如何删除它并且只显示

?搜索=键

任何想法?感谢

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;
}

3 个答案:

答案 0 :(得分:1)

我认为将POST用于表单会更好。

所以我在下面向您解释如何使用POST获得相同的功能(包括searchResult的固定链接)。网址甚至会看起来更好:而不是?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)中重定向到search_result

return $this->redirect(
    $this->generateUrl('search_result', array(
        'search'=>$request->get('search', '')
    ))
);

答案 1 :(得分:0)

具有name属性的所有表单字段都在查询字符串中。这么简单的方法就是手动渲染模板中的提交并省略名称。

答案 2 :(得分:0)

我解决了这个问题,因为我有很多需要这种功能的表格。

Symfony 3.x:

我创建了一个覆盖1块

的form_theme
{# 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()。但对于我的情况,我不需要那个。