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)
来自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)
小智 7
禁用自动空间过滤器只是为了渲染变量不是最好的事情,因为当你读取代码时,它并不是很清楚.
所以,而不是:
{% autoescape false %}{{ label|trans }}{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)
您可以使用 :
{{ label|trans|raw }}
| 归档时间: |
|
| 查看次数: |
9411 次 |
| 最近记录: |