在Symfony2中渲染表单和小部件

时间:2014-07-23 01:29:24

标签: symfony symfony-forms

我正在开发一个网站,我想个性化表格的呈现方式。

我的目的是为了实现这个结构的每个领域

<div class="form-group">
   <label for=":id">:LABEL</label>
   <input type=":type" class="form-control" id=":id" />
</div>

如果是复选框,则必须首先显示输入,而不显示类属性

2 个答案:

答案 0 :(得分:0)

Symfony Form Theming文档中列出了执行此操作的选项。

在您的表单主题Twig文件(通常为app/Resources/views/form.html.twig)中,您应该添加以下内容:

{% block form_row %}
{% spaceless %}
    <div class="form-group">
        {{ form_label(form) }}
        {{ form_errors(form) }} {# Can remove this unless you want inline errors #}
        {{ form_widget(form) }}
    </div>
{% endspaceless %}
{% endblock form_row %}

{% block form_widget_simple %}
{% spaceless %}
    {% set type = type|default('text') %}
    {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) %}
    <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
{% endspaceless %}
{% endblock form_widget_simple %}

答案 1 :(得分:0)

Ryan的回答需要再增加一行:

{% form_theme form _self %}

{% block form_row %}
{% spaceless %}
    <div class="form-group">
        {{ form_label(form) }}
        {{ form_errors(form) }} {# Can remove this unless you want inline errors #}
        {{ form_widget(form) }}
    </div>
{% endspaceless %}
{% endblock form_row %}

{% block form_widget_simple %}
{% spaceless %}
    {% set type = type|default('text') %}
    {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) %}
    <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
{% endspaceless %}
{% endblock form_widget_simple %}

根据symfony2文档How to customize Form Rendering当前要进行更改的模板,你必须写一行

  

{%form_theme form _self%}

在任何块重写的开始..