在Twig中设置默认的原始过滤器

ari*_*lcr 3 php symfony twig silex

我正在使用Silex建立网站,并使用Twig根据json文件显示内容。

这是控制器中的代码:

$app->get('/', function() use ($app) {

    $data = $app['data']->get('contactUs', 'es');

    return $app['twig']->render('test.html', $data);

});
Run Code Online (Sandbox Code Playgroud)

Data只是一个自定义类,将要显示的页面以及要使用的语言作为参数,并根据Twig用作页面上数据的json文件返回一个数组。

问题是json文件包含HTML标记,并且当Twig渲染页面时,它将它们显示为实体,例如,我的test.html模板如下所示:

<!DOCTYPE html>
<html>
    <head>
        <title>Twit Test</title>
    </head>
<body>

    {{ bannerTitle }}

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但这输出以下内容{{ bannerTitle }}

<span class='title light'>Contact Us</span>
Run Code Online (Sandbox Code Playgroud)

通过查看源代码,它看起来像这样:

&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;
Run Code Online (Sandbox Code Playgroud)

我环顾了文档,并且知道可以在模板上使用原始过滤器来避免这种情况,如下所示:

{{ bannerTitle|raw }}
Run Code Online (Sandbox Code Playgroud)

但是我想尽可能保持模板上的代码干净,并避免将raw所有内容放到模板上。

有没有办法告诉Twig始终将生成的输出视为原始输出?

PS:我也尝试用htmlentities,html_entity_decode等解析生成的数据,但没有运气:(

Ian*_*her 5

我很确定这可以通过使用{% autoescape false %} {% endautoescape %}树枝中的标签来实现。

{% autoescape false %}
<!DOCTYPE html>
<html>
    <head>
        <title>Twit Test</title>
    </head>
    <body>
        {{ bannerTitle }}
        {{ moreHTMLdata }}
        {{ evenMoreHTMLdata }} 
    </body>
</html>
{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请访问 http://twig.sensiolabs.org/doc/tags/autoescape.html

失败{% filter raw %} {% endfilter %}的地方就可以了,这可以节省您添加|raw到每个变量的麻烦。使用这两种方法中的|escape任何一种,只要记住可能需要的任何变量即可。