如何解决在 Symfony 4.4 中覆盖复选框表单字段产生重复标签并且没有字段
我无法覆盖 Twig 模板中 Symfony 表单中的复选框字段。
我正在我的 Twig 模板中使用以下代码构建该字段:
{{ form_row(form.legal,{
'label' : 'personal.form.fields.legal'|trans,}) }}
在同一个模板中,我有以下块,我试图在其中自定义标签。请注意,上面的翻译包含 HTML,这就是我需要 raw
过滤器的原因。
{% block _crmpiccobundle_details_legal_label %}
{% apply spaceless %}
<label{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}>
{{ label|unescape|raw }}
</label>
{% endapply %}
{%- endblock %}
不幸的是,这不起作用,而且奇怪的是让我没有复选框和重复的标签,我不知道为什么。
解决方法
看起来您正在使用基于引导程序的表单主题(例如 bootstrap_4_layout.html.twig 或 bootstrap_3_layout.html.twig)
尝试这样做:
{% block _crmpiccobundle_details_legal_label %}
{%- if widget is defined -%}
{{ widget|raw }}
{% apply spaceless %}
<label{% with { attr: label_attr } %}{{ block('attributes') }}{% endwith %}>
{{ label|unescape|raw }}
</label>
{% endapply %}
{%- endif -%}
{%- endblock %}
在 bootstrap 布局中,widget 部分需要包装到 label 中,因此主题调用同一个块两次,第一次调用 _label
部分,第二次调用 _widget
。对于第二次调用,theme 提供了 widget
变量,您必须自己呈现该变量(否则您将看不到复选框)。此外,您必须抑制标签被渲染两次,这可以通过检查是否定义了小部件来完成。
看看原始块如何也检查 widget is defined
是否避免双标签渲染:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。