2012-04-18 65 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 }}