簡體   English   中英

在Twig中設置默認原始過濾器

[英]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>

通過查看源代碼看起來像這樣:

&lt;span class=&#039;title light&#039;&gt;Contacto y&lt;/span&gt;&lt;br&gt;&lt;span class=&#039;title&#039;&gt;Ubicación&lt;/span&gt;

我環顧一下文檔,我知道我可以在模板上使用原始過濾器來避免這種情況,如下所示:

{{ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM