2014-09-21 74 views
1

我最近开始使用Symfony2框架。
我已经为我将要使用的任何不正确的术语道歉。定制Symfony2表格

我想定制如何在我的应用程序中呈现表单。

更具体地说,在我的嫩枝文件我渲染整个形式

{{ form(forms) }} 

我想自定义表单的布局。我知道表单的每一行都可以扩展为

{{ form_start(forms) }} 

//... 
<div> 
    {{ form_label(forms.field) }} 
    {{ form_errors(forms.field) }} 
    {{ form_widget(forms.field) }} 
</div> 
//... 

{{ form_end(forms) }} 

用这种格式编写的表单可以将所需的自定义添加到布局。

这是问题:我的表单没有预定义的行数,但是这些取决于存储在数据库中的某些值。我想在我的树枝上做的事情是这样的

{{ 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),但我认为这不适合我的情况(是吗?)。

有什么建议吗?
预先感谢您的帮助。

回答

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) }} 
+0

是的!你是对的!答案就在我眼前...... 非常感谢! – Alberto 2014-09-22 08:35:35

0

作为一个更灵活的解决方案,你可以做你直接想要的东西不改变窗体上的所有表格行主题结合的方式。

假设你的主窗体包含一个集合(!如果不是,让我们它现在如何做)呼吁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) }}