2012-04-18 49 views
3

我在学习Symfony2。目前,我试图在树枝模板中渲染表单标签。该标签包含一个html标记,在我的树枝文件中不能正确显示。树枝和自动翻转

这里如下在其中创建的表单字段的代码段:

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

在树枝文件I呈现字段标签如下:

{{ form_label(form.zipcode) }} 

我尝试了生,逃生, e过滤器,但在我的html页面提供的结果始终是字符串

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

而不是cor响应HTML代码!

有什么建议吗? 在此先感谢!

后来我找到了解决方案。 的解决方案是通过在Symfony的路径上设置标签块内禁用autoescape: 的symfony/src目录/ Symfony的/桥梁/嫩枝/资源/视图/表格/ form_div_layout.html.twig

所以,在你的树枝文件你必须把表格外以下行: {%form_theme形式_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 %} 

回答

8

JeanValjean自己:

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

而且一概而论这是haviour你的整个应用程序,你可以覆盖形式块标签:

{% 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 %} 
+0

我在[上autoescape树枝文档]阅读[1]“*函数返回模板数据(如宏和父)总是返回安全标记*“。 所以我想这个问题与form_label函数有关。因此,解决方案是重写这个函数来禁用autoescape! [1]:http://twig.sensiolabs.org/doc/tags/autoescape.html – JeanValjean 2012-04-18 13:59:59

+0

但是,在这种情况下autoescape false选项不起作用!正如我在我的问题中提到的,我尝试了官方Twig文档中描述的所有选项。 – JeanValjean 2012-04-18 14:01:10

+0

:)无论如何,感谢您的兴趣!我认为枝条文件必须改进! – JeanValjean 2012-04-18 14:30:28

7

要禁用autoespace过滤器只是呈现一个变量是不是因为当你读它不是真正清楚代码的最好的事情。

因此,而不是:

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

您可以使用:

{{ label|trans|raw }}