繁体   English   中英

自定义Symfony2表单

[英]Customizing Symfony2 forms

我最近开始使用Symfony2框架。
对于已经使用的任何错误术语,我已经表示歉意。

我想自定义表单在应用程序中的显示方式。

更具体地说,在我的Twig文件中,我使用

{{ 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循环不起作用。 我也研究了( 如何自定义表单渲染 ),但是我认为这不适合我的情况(是吗?)。

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

您需要自定义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) }}

作为一种更灵活的解决方案,您可以直接执行所需的操作,而无需更改将表单上所有表单行主题化的方式。

假设您的主表单包含一个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) }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM