以symfony格式

时间:2018-03-18 13:32:37

标签: forms symfony symfony-forms

假设我有一个名为myform的表单,其输入字段名为myinput。默认情况下,symfony将生成HTML小部件,如:

<input name="myform[myinput]" ... >

这不适用于我目前的javascripts,我需要获得以下内容:

<input name="myinput" ...>

我已经搜索了很多,并找到了两种方法来实现这一目标:

  • 在表单类型类的getBlockPrefix()方法中返回null。
  • 使用FormFactoryInterface::createNamed()创建表单并将null作为名称传递。

似乎不建议使用第一种方法,因为它会限制使用前缀块自定义表单呈现的能力。

建议使用第二种方法herehere

然而,两种方法都会将表单的名称更改为null,因此symfony将生成如下形式:

<form name="" ...>

这可能是因为form_div_layout.html.twig看起来像:

<form name="{{ name }}" ...

哪个没有验证为HTML5。

根据this page,&#34;这不是错误&#34;。

我知道我可以覆盖模板中的form_start块并完全删除名称,但似乎该表单一般不能与空名称一起使用(因此不会检查名称模板中的长度)。

所以我的问题是:删除symfony表单的输入名称前缀的推荐和HTML5兼容方法是什么?

2 个答案:

答案 0 :(得分:0)

  • 关于PHP,我认为两种选择都可以。
  • 关于Twig,我会在网站上创建自定义表单theme,也可以选择apply it to all forms。我认为这是根据您的具体需求呈现表单的 Symfony方式。(可以为空的表单名称)。

答案 1 :(得分:0)

这是表单呈现中的一个错误。我已经向symfony回购提交了pull request,但已被接受。

在发布更改之前,临时解决方案是将此代码添加到表单主题:

{# fix HTML5 validation of forms with null names #}
{% block form_start %}
    {% set name = name|default(block_prefixes.1) %}
    {{ parent() }}
{% endblock %}