Url Symfony2.1使用带有GET方法的表单
我需要有关使用Symfony2.1表单和method=GET以及干净的URL空间的帮助 我正在创建一个“过滤器”,我想在URL中设置它,这样人们就可以为他们的链接添加书签 因此,代码非常简单:Url Symfony2.1使用带有GET方法的表单,url,symfony-forms,symfony-2.1,Url,Symfony Forms,Symfony 2.1,我需要有关使用Symfony2.1表单和method=GET以及干净的URL空间的帮助 我正在创建一个“过滤器”,我想在URL中设置它,这样人们就可以为他们的链接添加书签 因此,代码非常简单: $form = $this->createFormBuilder($defaultData) ->add('from', 'date', array('required' => false, 'widget' => 'single_text', 'format' =>
$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);
但这不起作用。我还怀疑我目前正在挖一个巨大的漏洞
因此,问题是:我应该使用表单%5b from%5D
url,还是有更好的方法来完成所有这些(显然不使用POST)?您可以将根表单的名称设置为空,那么您的字段名将只是表单
。通过
// the first argument to createNamedBuilder() is the name
$form = $this->get('form.factory')->createNamedBuilder(null, 'form', $defaultData)
->add('from', 'date', array(
'required' => false,
'widget' => 'single_text',
'format' => 'dd.MM.yyyy'
));
使用返回null在您的AbstractType::getName
实现中,code>近来似乎具有相同的效果。旧线程,但值得一提的是,symfony 3完全忽略了getName
但是,如果需要表单名称为空,可以对getBlockPrefix
执行相同的操作
public function getBlockPrefix() {
return null;
}
这将导致表单字段的命名不带前缀。将表单类型用作服务时,是否可以执行类似操作?我认为您无法在该上下文中访问createNamedBuilder,而使用FormType::getName(){return“”;}会导致将FormType作为服务引用时出现问题。当然,您可以访问createNamedBuilder(),您只需要访问表单工厂:)$builder->getFormFactory()
。。。谁知道呢?谢谢FormFactory->createNamed
可用于获取表单
实例,而不是builder@caponica当使用表单作为服务时,您是否找到了解决方案?我被困在这上面了!但是,如果formtype返回null,则无法使用依赖项注入生成formtype。通常情况下,无法将此方法用于DI。返回null相当于接受的答案,请参见。