我最近开始使用Symfony2框架。我已经为我将要使用的任何不正确的术语道歉。
我想自定义表单在我的应用程序中的呈现方式。
更具体地说,在我的Twig文件中,我使用
呈现整个表单{{ form(forms) }}
我想自定义表单的布局。我知道表单的每一行都可以扩展为
{{ form_start(forms) }}
//...
<div>
{{ form_label(forms.field) }}
{{ form_errors(forms.field) }}
{{ form_widget(forms.field) }}
</div>
//...
{{ form_end(forms) }}
使用以这种格式编写的表单,我可以为布局添加所需的自定义。
问题在于:我的表单没有预定义的行数,但这些行取决于存储在数据库中的某些值。我想在我的Twig中做什么就像这样
{{ form_start(forms) }}
{% for field in forms %}
<div>
{{ form_label(forms.field) }}
{{ form_errors(forms.field) }}
{{ form_widget(forms.field) }}
</div>
{% endfor %}
{{ form_end(forms) }}
不幸的是,这个for循环不起作用。 我也研究过(How to Customize Form Rendering),但我认为这不适合我的情况(是吗?)。
有什么建议吗? 提前感谢您的帮助。
答案 0 :(得分:1)
您需要自定义form_row方法http://symfony.com/doc/current/cookbook/form/form_customization.html#customizing-the-form-row
// my_form.html.twig
{% extends 'form_div_layout.html.twig' %}
{% block form_row %}
<div>
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endblock form_row %}
// view.html.twig
{% form_theme form 'my_form.html.twig' %}
{{ form_start(form) }}
答案 1 :(得分:0)
作为一种更灵活的解决方案,您可以直接执行所需的操作,而无需更改表单上所有表单行的主题方式。
假设你的主表单包含一个Collection(如果不是,现在就让它们完成它!)名为subforms
,其中包含可变数量的项目(每个都是另一种形式),你可以这样做:
{{ form_start(forms) }}
{% for subform in forms.subforms %}
<div>
{{ form_label(subform.fieldname) }}
{{ form_errors(subform.fieldname) }}
{{ form_widget(subform.fieldname) }}
</div>
{% endfor %}
{{ form_end(forms) }}