Intereting Posts
Возможно ли создать DateTimeZone со смещения? Переключение между мобильными и стандартными представлениями с помощью css / php styleswitcher cURL не может использовать клиентский сертификат, на локальном сервере cURL PHP RESTful service всегда возвращает FALSE Проблема с PHP cookie – www или без www сохранение состояния флажка при перезагрузке Пользовательская страница ошибки 404 – только для страниц PHP Неправильная дата при преобразовании даты в php Как я могу пригласить людей из MSN, Yahoo в мое приложение? Заменить контент для переменной PHP (сохранены теги HTML) Значение шифрования Mcrypt js отличается от значения, полученного с помощью PHP mcrypt / Mcrypt JS decrypt, не работает для символов UTF-8 Переменная PHP не отображается на странице через ajax jquery Сервер Android и PHP: шифрование и дешифрование данных mysqli подготовил операторы и mysqli_real_escape_string Формы с переменным числом полей

Установите фильтр по умолчанию в Twig

Я использую 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> 

Который, смотря на исходный код, выглядит так:

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

Я оглядываюсь в документах, и я знаю, что я могу использовать фильтр 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' )