Php Symfony表单集合呈现
我用的是symfony2.3 我有字段类型为“collection”的表单 细枝中的可视化代码:Php Symfony表单集合呈现,php,forms,symfony,twig,symfony-forms,Php,Forms,Symfony,Twig,Symfony Forms,我用的是symfony2.3 我有字段类型为“collection”的表单 细枝中的可视化代码: {% for field in form.fields %} {{ form_row(field.name) }} {% endfor %} 除form.fields为空时外,一切正常。 然后细枝环里什么都看不见,巫婆没事。 但是在表单的末尾有“form.fields”元素的“label”。唯一的标签 解决方法: {% for field in form.fields %}
{% for field in form.fields %}
{{ form_row(field.name) }}
{% endfor %}
除form.fields为空时外,一切正常。
然后细枝环里什么都看不见,巫婆没事。
但是在表单的末尾有“form.fields”元素的“label”。唯一的标签
解决方法:
{% for field in form.fields %}
{{ form_row(field.name) }}
{% endfor %}
<div class="hidden">
{{ form_row(form.fields) }}
正如您正确猜测的那样,Symfony TwigBridge跟踪渲染的内容和未渲染的内容。这很有用,因为有一个名为
form\u rest(form)
的函数,它特别适用于打印隐藏的表单字段,并防止出现“伟大的朱庇特!我忘了打印该字段!”的情况您通常会在表单末尾的提交按钮前找到form\u rest
还认为集合是一个复合表单类型,其中包含子窗体的变量列表。当未触发
for
循环时,由于表单类型为空,对{{form_row(form.fields)}}
的调用将打印出集合表单类型。默认情况下,这将打印(您猜到)集合标签和空div。另一方面,当集合不是空的时候,SimfOny会将集合视为已呈现,因为所有的孩子都已经呈现(参见)。
您可以查看Symfony标准主题,尤其是块表单行
(显示标签打印)和表单小部件复合物
(div和for循环)
因此,如果您只需要隐藏标签(又快又脏,还有一些div
),只需使用:
$builder->add(
'fieldDataMappers',
'collection',
array(
'type' => new FieldDataType(),
'label' => false,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
)
);
或者更好,只需输出整个集合小部件,不带行:
{{ form_widget(form.fieldDataMappers) }}
甚至更好的是,您可以使用以下内容打印整个系列:
{{ form_row(form.fieldDataMappers) }}
…然后添加一个自定义集合输出,如下所示(注意名称语法和缺少的form_标签
call):
{%block collection\u row-%}
{{-form_错误(form)-}
{{-form_小部件(form)-}
这里有什么?
{%-endblock集合_行%}
希望这有帮助 正如您正确猜测的,Symfony TwigBridge会跟踪渲染的内容和未渲染的内容。这很有用,因为有一个名为
form\u rest(form)
的函数,它特别适用于打印隐藏的表单字段,并防止出现“伟大的朱庇特!我忘了打印该字段!”的情况您通常会在表单末尾的提交按钮前找到form\u rest
{{ form_label(form.emails) }}
<ul id="email-fields-list"
data-prototype="{{ form_row(form.emails.vars.prototype)|e }}"
data-widget-tags="{{ '<ol></ol>'|e }}"
data-widget-counter="{{ form.emails|length }}">
{% for email in form.emails %}
<ol>
{{ form_errors(email) }}
{{ form_row(email) }}
</ol>
{% endfor %}
</ul>
<button type="button" class="add-another-collection-widget" data-list-selector="#email-fields-list">Add email</button>
{{ form_widget(form.emails) }}
还认为集合是一个复合表单类型,其中包含子窗体的变量列表。当未触发
for
循环时,由于表单类型为空,对{{form_row(form.fields)}}
的调用将打印出集合表单类型。默认情况下,这将打印(您猜到)集合标签和空div。另一方面,当集合不是空的时候,SimfOny会将集合视为已呈现,因为所有的孩子都已经呈现(参见)。
您可以查看Symfony标准主题,尤其是块表单行
(显示标签打印)和表单小部件复合物
(div和for循环)
因此,如果您只需要隐藏标签(又快又脏,还有一些div
),只需使用:
$builder->add(
'fieldDataMappers',
'collection',
array(
'type' => new FieldDataType(),
'label' => false,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
)
);
或者更好,只需输出整个集合小部件,不带行:
{{ form_widget(form.fieldDataMappers) }}
甚至更好的是,您可以使用以下内容打印整个系列:
{{ form_row(form.fieldDataMappers) }}
…然后添加一个自定义集合输出,如下所示(注意名称语法和缺少的form_标签
call):
{%block collection\u row-%}
{{-form_错误(form)-}
{{-form_小部件(form)-}
这里有什么?
{%-endblock集合_行%}
希望这有帮助 {{form_label(form.emails)}
{{ form_label(form.emails) }}
<ul id="email-fields-list"
data-prototype="{{ form_row(form.emails.vars.prototype)|e }}"
data-widget-tags="{{ '<ol></ol>'|e }}"
data-widget-counter="{{ form.emails|length }}">
{% for email in form.emails %}
<ol>
{{ form_errors(email) }}
{{ form_row(email) }}
</ol>
{% endfor %}
</ul>
<button type="button" class="add-another-collection-widget" data-list-selector="#email-fields-list">Add email</button>
{{ form_widget(form.emails) }}
{form.emails%}中的电子邮件为%
{{表格错误(电子邮件)}
{{表格(电子邮件)}
{%endfor%}
添加电子邮件
{{form_小部件(form.emails)}
我只是在block-thant处理添加到集合之后添加{{form_widget(form.emails)}
,并且在表单的末尾不再添加标签
干杯{{form_label(form.emails)}
{form.emails%}中的电子邮件为%
{{表格错误(电子邮件)}
{{表格(电子邮件)}
{%endfor%}
添加电子邮件
{{form_小部件(form.emails)}
我只是在block-thant处理添加到集合之后添加{{form_widget(form.emails)}
,并且在表单的末尾不再添加标签
干杯我用以下方法解决了这个问题:
{{ form_label(form.collection) }}
{% for element in form.collection %}
{{ form_widget(element) }}
{% else %}
{{ form_widget(form.collection) }}
{% endfor %}
(我知道有点晚了,但Symfony 5还是有问题)我用以下方法解决了这个问题:
{{ form_label(form.collection) }}
{% for element in form.collection %}
{{ form_widget(element) }}
{% else %}
{{ form_widget(form.collection) }}
{% endfor %}
(我知道有点晚了,但Symfony 5仍然存在问题)是的,我使用了一些伪代码:/。主要问题是当集合为空时。就像symfony不会将其标记为“已处理”,然后在表单的末尾呈现。如果这是一个新集合,您必须知道将不会有任何元素。您必须通过原型向集合中添加新项。是的,我使用了一些伪代码:/。主要问题是当集合为空时。就像symfony不会将其标记为“已处理”,然后在表单的末尾呈现。如果这是一个新集合,您必须知道将不会有任何元素。您必须按原型将新项目添加到集合中。当
allow\u add
,allow\u delete
设置为false
时,是否会发生这种情况?是的,它是