根据项目覆盖表单呈现模板

时间:2014-03-30 12:28:11

标签: forms symfony

例如
我在表单对象中有两个成员。

form_widget(form.icon)

form_widget(form.name)

我已更改' choice_widget_expanded'

{% block choice_widget_expanded %}
{% spaceless %}
    <table {{ block('widget_container_attributes') }}>
    {% for child in form %}
      <tr>
        {{ form_widget(child) }}
        {{ form_label(child) }}
      </tr>
    {% endfor %}
    </table>
{% endspaceless %}
{% endblock choice_widget_expanded %}

但我想仅在{{form.icon}}

上影响它

有可能吗?如何判断传递给该块的对象是form.icon还是form.name?

1 个答案:

答案 0 :(得分:2)

要覆盖choice_widget_expanded的标签栏,您可以定义您的块并使用它,如下所示

{% block choice_widget_expanded %}
{% spaceless %}
    <table {{ block('widget_container_attributes') }}>
    {% for child in form %}
      <tr>
        {{ form_widget(child) }}
        {{ form_label_custom(child) }}
      </tr>
    {% endfor %}
    </table>
{% endspaceless %}
{% endblock choice_widget_expanded %}

自定义标签form_label_custom

  

现在请注意每个具有展开属性的选择字段(不是全部   字段)你的新标签将在行动

{% block form_label_custom %}
{% spaceless %}
    {% if label is not sameas(false) %}
        {% if not compound %}
            {% set label_attr = label_attr|merge({'for': id}) %} /* you can skip this part for td */
        {% endif %}
        {% if required %}
            {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
        {% endif %}
        {% if label is empty %}
            {% set label = name|humanize %}
        {% endif %}
        <td {% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ label|trans({}, translation_domain) }}</td>
    {% endif %}
{% endspaceless %}
{% endblock form_label_custom %}

甚至可以定义自定义form_widget_custom(child)块以覆盖

{% block form_widget_custom %}
{% spaceless %}
    {% if compound %}
        {{ block('form_widget_compound') }}
    {% else %}
        {{ block('form_widget_simple') }}
    {% endif %}
{% endspaceless %}
{% endblock form_widget_custom %}

现在渲染你的字段

{{ form_widget_custom(form.icon) }}