根据目标字段类型自定义Symfony表单标签

时间:2014-09-08 06:41:27

标签: php forms symfony-forms symfony-2.4

我正在尝试自定义Symfony表单标签,以通过此Symfony doc为所有必填字段添加星号(*)。但我的星号<span必须位于<label标记内,因此我必须按照此处的说明自定义form_label块。到目前为止还不错,但定制也适用于复选框/无线电字段的每个项目(标签)。它看起来很奇怪。

任何想法,如何在标签自定义块中过滤它以仅为父标签格式化。

这是我的重写代码:

{% block form_label -%}
    {% if label is not sameas(false) -%}
        {% if not compound -%}
            {% set label_attr = label_attr|merge({'for': id}) %}
        {%- 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 -%}
        <label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>
            {{ label|trans({}, translation_domain) }}
            {% if required %} <span class="required" title="This field is required">*</span> {% endif %}
        </label>
    {%- endif %}
{%- endblock form_label %}

简而言之,我希望此块中的变量能够识别此标签所针对的字段类型。

1 个答案:

答案 0 :(得分:1)

好吧,我通过对这个重写块中可用变量的一些调整解决了这个问题。 下面是我重写的条件代码

    {% if (required) and ( form.vars.checked is not defined ) %}
        <span class="validation-error-star" title="This field is required">*</span>
    {% endif %}

如果为该字段定义了任何checked属性,我还会添加另一个条件,而不是仅将必需变量作为条件;通常是收音机/复选框字段类型。

这有助于我区分标签覆盖块内的字段类型。希望这有助于某人。 :)