树枝和自动化

Jea*_*ean 3 escaping symfony twig

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

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

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

在twig文件中,我渲染字段标签如下:

{{ form_label(form.zipcode) }}
Run Code Online (Sandbox Code Playgroud)

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

 <abbr title="Zone Improvement Plan">CAP</abbr> code
Run Code Online (Sandbox Code Playgroud)

而不是相应的HTML代码!

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

后来我找到了解决方案.该解决方案是通过在Symfony的路径中提供的标签块内禁用autoescape:symfony的/ SRC/Symfony的/网桥/枝条/资源/视图/窗体/ 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 %}
Run Code Online (Sandbox Code Playgroud)

Alt*_*PHP 8

来自JeanValjean本人:

{% autoescape false %}{{ form.zipcode.vars.label | trans }}{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)

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

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

  • 我终于找到了一条又快又丑的捷径。我是新人,所以我无法将其作为新解决方案发布。不过,我想分享我正在使用的解决方案。简而言之,我在 twig 文件中使用 {% autoescape false %}{{ form.zipcode.vars['label'] }}{% endautoescape %} 代码。我还重写了 {% block generic_label %} 以使其在我的 twig 文件中自动执行。 (2认同)

小智 7

禁用自动空间过滤器只是为了渲染变量不是最好的事情,因为当你读取代码时,它并不是很清楚.

所以,而不是:

{% autoescape false %}{{ label|trans }}{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)

您可以使用 :

{{ label|trans|raw }}