Я использую Silex для создания сайта и Twig для отображения содержимого на основе json-файла.
Вот код в контроллере:
$app->get('/', function() use ($app) { $data = $app['data']->get('contactUs', 'es'); return $app['twig']->render('test.html', $data); });
Data
– это просто пользовательский класс, который принимает в качестве аргумента отображаемую страницу и язык для использования и возвращает массив на основе json-файла, который Twig использует в качестве данных на странице.
Проблема заключается в том, что 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>
Я оглядываюсь в документах, и я знаю, что я могу использовать фильтр raw на шаблоне, чтобы избежать этого:
{{ 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
после каждой переменной досадным образом. Вероятно, Twig делает это по соображениям безопасности.
В противном случае:
<!DOCTYPE html> <html> <head> <title>Twit Test</title> </head> <body> <span class='title light'>{{ bannerTitle }}</span> </body>
Теперь все, что вам нужно пройти, это:
Array( 'bannerTitle' => 'Contact Us' )