【发布时间】:2012-11-14 17:30:50
【问题描述】:
我需要有关使用带有 method=GET 和干净 URL 空间的 Symfony2.1 表单的帮助。
我正在创建一个我想在 URL 中设置的“过滤器”,以便人们可以为他们的链接添加书签。
所以,代码非常简单:
$form = $this->createFormBuilder($defaultData)
->add('from', 'date', array('required' => false, 'widget' => 'single_text', 'format' => 'dd.MM.yyyy'))
我渲染了表单小部件,一切都很好。
但是当我提交表单时,它会产生非常难看的 GET 参数:
/app_dev.php/de/event?form%5Bfrom%5D=17.11.2012
这是因为输入的名字当然是form[from]
所以为了清理 URL 空间,我给自己做了一个主题:
{% block widget_attributes %}
{% spaceless %}
id="{{ id }}" name="{{ id }}"{% if read_only %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
{% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
我将name="{{ full_name }}" 替换为name="{{ id }}"。
这很好用——我的 URL 空间更干净了:
/app_dev.php/de/event?form_from=17.11.2012
我想我可以忍受 - 尽管理想情况下 from=xxx 会更好。这是第一个也是更小的问题。
第二个问题是我无法再绑定表单了——这很明显,因为不再设置参数“form”——“form_from”已经替换了它,但是当你进行绑定时它仍然期待表单[]。
我尝试这样解决:
$fromDate = $this->get('request')->query->get('form_from', null);
$request->query->set('form', array('from' => $fromDate);
但这不起作用。我也怀疑我现在正在挖掘一个巨大的黑客漏洞。
所以,问题是:我应该只使用form%5Bfrom%5D url,还是有更好的方法来完成所有这些(显然不使用 POST)?
【问题讨论】:
标签: url symfony-forms symfony-2.1