[英]Set default raw filter in Twig
我正在使用Silex構建一個站點和Twig來顯示基於json文件的內容。
這是控制器中的代碼:
$app->get('/', function() use ($app) {
$data = $app['data']->get('contactUs', 'es');
return $app['twig']->render('test.html', $data);
});
Data
只是一個自定義類,它將要顯示的頁面和要使用的語言作為參數,並根據Twig用作頁面上數據的json文件返回一個數組。
問題是json文件包含HTML標記,並且當Twig呈現頁面時它將它們顯示為實體,例如,我的test.html模板如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Twit Test</title>
</head>
<body>
{{ bannerTitle }}
</body>
</html>
但是這會在{{ bannerTitle }}
上輸出以下內容:
<span class='title light'>Contact Us</span>
通過查看源代碼看起來像這樣:
<span class='title light'>Contacto y</span><br><span class='title'>Ubicación</span>
我環顧一下文檔,我知道我可以在模板上使用原始過濾器來避免這種情況,如下所示:
{{ bannerTitle|raw }}
但是我希望盡可能保持模板上的代碼,並避免將raw
內容放在模板上的所有內容中。
有沒有辦法告訴Twig始終將生成的輸出視為原始?
PS:我也嘗試用htmlentities,html_entity_decode等解析生成的數據,沒有運氣:(
我很確定這可以通過在樹枝中使用{% autoescape false %} {% endautoescape %}
標簽來實現。
即
{% autoescape false %}
<!DOCTYPE html>
<html>
<head>
<title>Twit Test</title>
</head>
<body>
{{ bannerTitle }}
{{ moreHTMLdata }}
{{ evenMoreHTMLdata }}
</body>
</html>
{% endautoescape %}
有關更多信息,請訪問http://twig.sensiolabs.org/doc/tags/autoescape.html
如果沒有給出{% filter raw %} {% endfilter %}
,那么就可以節省你必須為每個變量添加|raw
。 使用這些方法中的任何一種,只需記住|escape
可能需要它的任何變量。
您不應將HTML作為數據傳遞給模板引擎。 如果JSON有標簽,那么你將需要投入|raw
的每一個變量后unfortnately。 出於安全原因,Twig可能會這樣做。
除此以外:
<!DOCTYPE html>
<html>
<head>
<title>Twit Test</title>
</head>
<body>
<span class='title light'>{{ bannerTitle }}</span>
</body>
現在您需要傳遞的是:
Array(
'bannerTitle' => 'Contact Us'
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.