我正在使用symfony 2.3,我的表单的字段类型为“ collection”
树枝中的可视化代码:
{% for field in form.fields %}
{{ form_row(field.name) }}
{% endfor %}
一切正常,期望form.fields为空。然后在树枝循环中看不到任何东西,女巫很好。但是在表单的末尾有元素“ form.fields”的“标签”。仅标签。
解决方法:
{% for field in form.fields %}
{{ form_row(field.name) }}
{% endfor %}
<div class="hidden">
{{ form_row(form.fields) }}
如果有元素,它们将在循环中呈现。{{form_row}}将为空,因为所有元素都在上面的循环中进行了迭代。但是,如果form.fields为空,则存在“ hidden”(在div中)标签。
我想念的是什么!?为什么会这样呢?
隐藏的div内容:
<div class="form-group"><label class="col-sm-2 control-label required">name</label><div class="col-sm-10"><div id="my-id" data-prototype=""></div></div></div>
生成器配置:
$builder->add(
'fieldDataMappers',
'collection',
array(
'type' => new FieldDataType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
)
);
正如您已经正确猜到的那样,Symfony TwigBridge会跟踪呈现的内容和未呈现的内容。这很有用,因为有一个称为的函数form_rest(form)
,该函数对于打印隐藏的表单字段特别有用,并且可以防止“大木星!我忘记打印该字段!”。片刻。:)您通常会form_rest
在表单末尾的“提交”按钮之前找到。
还应考虑该集合是复合表单类型,其中包含子表单的变量列表。当for
不触发循环时,由于表单类型为空,因此调用以{{ form_row(form.fields) }}
打印出收集表单类型。默认情况下,这将打印(您已经猜到了)集合标签和一个空的div。另一方面,当集合不为空时,Symfony会将集合视为已渲染,因为所有子代均已渲染(请参见FormView :: isRendered)。
您可以查看Symfony标准主题form_div_layout.html.twig
,特别是块form_row
(显示标签打印)和form_widget_compound
(thediv
和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) }}
...然后添加一个Twig主题以使用类似以下内容的自定义集合输出(请注意名称语法和丢失的form_label
调用):
{% block collection_row -%}
<div>
{{- form_errors(form) -}}
{{- form_widget(form) -}}
</div>
<div class="hidden">Something here?</div>
{%- endblock collection_row %}
希望对您有所帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句