Forms Symfony2-集合类型在我的视图中显示两次

Forms Symfony2-集合类型在我的视图中显示两次,forms,symfony,Forms,Symfony,我有一个带有集合的表单,当我使用以下语法时,我可以正确地看到它: form_row(form.items) 然后,当我试图自己渲染它时,它是重复的 这是我的小树枝文件中的代码: {{ form_errors(form) }} {{ form_start(form) }} ... some fields here ... <div id="{{ form.items.vars.id }}" class="collection items" data-prototype=

我有一个带有集合的表单,当我使用以下语法时,我可以正确地看到它:

form_row(form.items)
然后,当我试图自己渲染它时,它是重复的

这是我的小树枝文件中的代码:

{{ form_errors(form) }}
{{ form_start(form) }}

    ... some fields here ...

    <div id="{{ form.items.vars.id }}" class="collection items" data-prototype="{{ form_widget(form.items.vars.prototype)|e }}">
        <h3>{{ form_label(form.items) }}</h3>
        <a href="#" class="add_link">Add</a>
        {% for item in form.items %}
            {{ form_row(item) }}
        {% endfor %}
    </div>

    ... some other fields here ...

{{ form_end(form) }}
下面是我的输出:

<!-- This is the one I need, I removed the prototype for the sake of clarity -->
<div id="bundle_data_items" class="collection items" data-prototype="...">
    <h3>
        <label class="required">Items</label>
    </h3>
    <a href="#" class="add_link">Add</a>
</div>
<!-- This one is automatically added. The prototype is empty -->
<div>
    <label class="required">Items</label>
    <div id="bundle_data_items" data-prototype=""></div>
</div>

项目
项目
你知道为什么会这样吗

我遵循了这一点。我错过什么了吗

编辑:
只有当我的收藏为空时才会发生这种情况

不幸的是,我还不能发表评论(没有50个代表),但这可能是由浏览器本身造成的。由于某个地方的标记而导致的渲染问题?查看原始http响应是否具有相同的内容。因为它与form_行(form.items)一起工作,而不是您自己的,所以“可能”是这样的


在输出它之前,我会检查它是否也是空的。

当您的集合为空时,
{%for item in form.items%}
中的
for
循环永远无法执行,因此
表单行(item)
永远不会发生。这意味着,对于Twig/Symfony,您从未实际输出字段

然后在表单末尾执行
form\u end
。这通常不是什么大事,但:

除非将
render\u rest
设置为false,否则此帮助程序还会输出
form\u rest()

因此,您只需为
render\u rest
传递一个
false
值:

{{ form_end(form, {'render_rest': false}) }}
我不确定
form\u widget
是如何解决您的问题的,但我也不确定您是如何尝试该替代方案的-也许您在
for
循环之外运行了它


作为一个旁白,您应该考虑创建自己的代码>窗体.html。Tigg < /Cord>模板文件,这样您就可以重用您为集合选择的标记格式。它将允许您简单地执行<代码> FuffyWiGET(…)<代码>,而不必拆分碎片和<代码> FuffEnth将始终考虑该字段将被输出,即使集合是空的。

< P>我找到了解决方案。

结果表明,当集合为空时,它的呈现将永远不会发生。我可以使用sjagr解决方案,但由于有些字段需要自动渲染,我无法使用它

因此,我的解决方案如下:

{{ form_errors(form) }}
{{ form_start(form) }}

    ... some fields here ...

    <div id="{{ form.items.vars.id }}" class="collection items" data-prototype="{{ form_widget(form.items.vars.prototype)|e }}">
        <h3>{{ form_label(form.items) }}</h3>
        <a href="#" class="add_link">Add</a>
        {% for item in form.items %}
            {{ form_row(item) }}
        {% else %}
            {% do form.items.setRendered %}
        {% endfor %}
    </div>

    ... some other fields here ...

{{ form_end(form) }}
{{form_errors(form)}
{{form_start(form)}}
... 这里有些田地。。。
{{form_标签(form.items)}
{form.items%%中的项的%s}
{{表格_行(项目)}
{%else%}
{%do form.items.setRendered%}
{%endfor%}
... 这里还有其他一些领域。。。
{{form_end(form)}}

那么
的内容是什么呢。。。这里的一些字段…
。。。这里还有一些其他字段…
。。。你是不是无意中在细枝文件中输出了两次?@sjagr我仔细检查了一下,没有其他东西被输出两次。其他字段不是集合,显示为
{{form_row(form.comment)}
尝试
form_widget
,看看是否有效?它与
form_widget
一起工作。问题是呈现的不是我想要的。谢谢你的见解。我不知道
form\u end
选项。我记得将来我会制作自己的小部件。@A.D.不用担心,这是我从我的一个项目中为您定制的一个示例。当然,有很多方法可以做到这一点,所以我的格式只是其中之一。谢谢你的例子。这会有帮助的
{{ form_errors(form) }}
{{ form_start(form) }}

    ... some fields here ...

    <div id="{{ form.items.vars.id }}" class="collection items" data-prototype="{{ form_widget(form.items.vars.prototype)|e }}">
        <h3>{{ form_label(form.items) }}</h3>
        <a href="#" class="add_link">Add</a>
        {% for item in form.items %}
            {{ form_row(item) }}
        {% else %}
            {% do form.items.setRendered %}
        {% endfor %}
    </div>

    ... some other fields here ...

{{ form_end(form) }}