我有麻烦覆盖一个复选框字段在我的Symfony形式在我的Twig模板。
我在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 %}
不幸的是,这不起作用,奇怪的是,我留下了没有复选框和一个重复的标签,我不知道为什么。
2条答案
按热度按时间yvgpqqbh1#
看起来你正在使用一个基于 Bootstrap 的表单主题(如bootstrap_4_layout.html.twig或bootstrap_3_layout.html.twig)
试着这样做:
在bootstrap布局中,widget部分需要 Package 到label中,因此theme会两次调用同一个块,第一次调用
_label
部分,第二次调用_widget
。对于第二次调用,theme提供了widget
变量,您必须自己呈现该变量(否则你不会看到你的复选框)。此外,你必须禁止标签被渲染两次,这可以通过检查是否定义了小部件来完成。查看原始块如何检查是否
widget is defined
以避免双重标签渲染:https://github.com/symfony/symfony/blob/e2f430dfb4c0c8cdde01ed111f4f0851e268ab5a/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_layout.html.twig#L83
lmvvr0a82#
我在
boostrap_5_layout
中找到了解决同样问题的方法。如果你不在顶部调用
{% use "bootstrap_base_layout.html.twig" %}
,它会给予一个双标签和一个双div.form-check。所以只要加上这样的,它的工作对我来说。