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)
通过查看源代码,它看起来像这样:
<span class='title light'>Contacto y</span><br><span class='title'>Ubicación</span>
Run Code Online (Sandbox Code Playgroud)
我环顾了文档,并且知道可以在模板上使用原始过滤器来避免这种情况,如下所示:
{{ bannerTitle|raw }}
Run Code Online (Sandbox Code Playgroud)
但是我想尽可能保持模板上的代码干净,并避免将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 %}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请访问 http://twig.sensiolabs.org/doc/tags/autoescape.html
失败{% filter raw %} {% endfilter %}
的地方就可以了,这可以节省您添加|raw
到每个变量的麻烦。使用这两种方法中的|escape
任何一种,只要记住可能需要的任何变量即可。
归档时间: |
|
查看次数: |
3908 次 |
最近记录: |