3

我正在学习 Symfony2。目前,我正在尝试在树枝模板中呈现表单标签。标签包含一个 html 标记,该标记在我的 twig 文件中未正确呈现。

下面是创建表单字段的代码:

$builder->add('zipcode', 'integer', array(
        'label' => '<abbr title="Zone Improvement Plan">CAP</abbr> code',
        ));

在树枝文件中,我将字段标签呈现如下:

{{ form_label(form.zipcode) }}

我尝试了 raw、escape、e 过滤器,但我的 html 页面中提供的结果始终是字符串

 <abbr title="Zone Improvement Plan">CAP</abbr> code

而不是相应的 HTML 代码!

有什么建议吗?提前致谢!

后来我找到了解决办法。解决方案是在路径中禁用 Symfony 提供的标签块内的自动转义:symfony / src / Symfony / Bridge / Twig / Resources / views / Form / form_div_layout.html.twig

因此,在您的 twig 文件中,您必须将以下几行放在表单之外: {% form_theme form _self %}

{% block generic_label %}
{% spaceless %}
  {% if required %}
      {% set attr = attr|merge({'class': attr.class|default('') ~ ' required'}) %}
  {% endif %}
  <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>{% autoescape false %}{{ label|trans }}{% endautoescape %}</label>
{% endspaceless %}
{% endblock %}
4

2 回答 2

8

来自冉阿让本人:

{% autoescape false %}{{ form.zipcode.vars.label | trans }}{% endautoescape %}

要将这种行为推广到您的整个应用程序,您可以覆盖标签的表单块:

{% block generic_label %}
    {% spaceless %}
        {% if required %}
            {% set attr = attr|merge({'class': attr.class|default('') ~ ' required'}) %}
        {% endif %}
        <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>
            {% autoescape false %}{{ label|trans }}{% endautoescape %}
        </label>
    {% endspaceless %}
{% endblock %}
于 2012-04-18T13:58:01.207 回答
7

禁用 autoespace 过滤器只是为了渲染一个变量并不是最好的事情,因为当你阅读代码时它并不是很清楚。

所以,而不是:

{% autoescape false %}{{ label|trans }}{% endautoescape %}

您可以使用 :

{{ label|trans|raw }}

于 2012-12-27T15:12:33.717 回答