Symfony — можно ли отключить экранирование вывода для каждого модуля (или для каждого шаблона)?

Я пытаюсь вывести некоторый HTML в шаблоне XML, и метод экранирования Symfony все портит. Поэтому я попытался сделать копию settings.yml в папке конфигурации модуля, но, похоже, он полностью проигнорирован. Есть ли простой способ изменить настройки escaping_strategy и/или escaping_method для каждого модуля или даже для каждого шаблона?


person Steven Mercatante    schedule 01.02.2010    source источник


Ответы (3)


Пока экранирование вывода включено, вы по-прежнему имеете доступ к необработанному значению через $sf_data. Например, если HTML, который вы пытаетесь вывести, был сохранен в переменной с именем html в вашем действии:

$this->html = '<b>My HTML</b>';

Вы можете получить неэкранированное значение следующим образом:

<?php echo $sf_data->getRaw('html') ?>

http://www.symfony-project.org/book/1_0/07-Inside-the-View-Layer#chapter_07_sub_activating_output_escaping

Я не верю, что есть способ отключить эту функцию для каждого модуля.

person nortron    schedule 01.02.2010
comment
Выглядит круто, не знал об этом. Я не понял такого вопроса и собирался ответить только для объекта: $yourObject->getRawValue()->getProperty() .. если это поможет... - person Julien; 02.02.2010
comment
Жюльен: если он пытается работать с модельным объектом, ваше решение было бы идеальным, вы должны опубликовать ответ на всякий случай. - person nortron; 02.02.2010
comment
Спасибо Cryo, $sf_data-›getRaw() справилась с задачей. Julien, спасибо за информацию о том, как использовать эту модель. - person Steven Mercatante; 02.02.2010

getRaw работает, только если переменная передается из действия. для использования переменной в представлении

sfOutputEscaperGetterDecorator::unescape($html)
person Hesky    schedule 27.06.2011
comment
Я хотел отключить некоторые атрибуты, но, к сожалению, атрибуты недоступны через $sf_data->getRaw(..). Но твой ответ помог! Спасибо! - person Jonathan Pasquier; 01.04.2016

Просто столкнулся с этой проблемой сегодня, и мне удалось решить ее, установив sfConfig::set('sf_escaping_strategy', false) в моем контроллере (либо в методе preExecute для всех действий в этом модуле, либо в конкретном действии - executeWhatever).

person Vlad Jula-Nedelcu    schedule 22.02.2012