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


Customizing Symfony form label based on targeted field type

我正在尝试自定义Symfony表单标签,以便通过此Symfony文档为所有必填字段添加星号(*)。但是我的星号<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 %}

简而言之,我希望这个块中有一个变量来标识这个标签的目标字段类型。

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

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

如果为该字段定义了任何已检查的属性,则我进一步添加了另一个条件,而不是仅将必需的变量作为条件;这通常是无线电/复选框字段类型所具有的。

这帮助我区分了标签覆盖块中的字段类型。希望这能帮助到别人。:)