symfony - 在 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 part 需要被包裹到 label 中,所以主题调用同一个 block 两次,第一次调用_label
part,第二次调用_widget
. 对于第二次调用,主题提供了widget
变量,您必须自己渲染(否则您将看不到您的复选框)。此外,您必须禁止标签被渲染两次,这可以通过检查是否定义了小部件来完成。
看看原始块如何检查是否widget is defined
避免双标签渲染:
推荐阅读
- java - 如何在一种方法中抛出不同类型的异常
- python - 如何从上传的用户文件Django中提取标题
- xml - 为什么自定义 Splash.png 会引发 XML 扩展错误
- c++ - 在控制台上调整 2 个不同对象的速度
- kubernetes - GCP 集群 ip 地址与请求的 remoteAddr 不同
- javascript - 如何从从后端函数获取内容的表中获取数据?
- kotlin - 如何在 Kotlin 中获得有保证的唯一列表洗牌
- python - Django 查询创建 __mycondition 相同的 __startswish
- javascript - 有什么方法可以使用 jQuery 事件触发器来触发 Vuejs 函数?
- java - 检测鼠标悬停在不是 JComponent 的对象上