我有一个搜索表单。问题是当我发布它时会为提交按钮创建一个变量
?搜索=键&安培;提交=
我似乎无法弄清楚如何删除它并且只显示
?搜索=键
任何想法?感谢
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;
}
答案 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()
。但对于我的情况,我不需要那个。