我正在尝试自定义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 %}
简而言之,我希望此块中的变量能够识别此标签所针对的字段类型。
答案 0 :(得分:1)
好吧,我通过对这个重写块中可用变量的一些调整解决了这个问题。 下面是我重写的条件代码
{% if (required) and ( form.vars.checked is not defined ) %}
<span class="validation-error-star" title="This field is required">*</span>
{% endif %}
如果为该字段定义了任何checked属性,我还会添加另一个条件,而不是仅将必需变量作为条件;通常是收音机/复选框字段类型。
这有助于我区分标签覆盖块内的字段类型。希望这有助于某人。 :)