Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Steven MercatanteОтветов: 3

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

phpsymfony1

Ответы

Ответ 1 · рейтинг 17 · nortron

Пока экранирование вывода включено, вы по-прежнему имеете доступ к необработанному значению через $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

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

Ответ 2 · рейтинг 11 · Hesky

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

sfOutputEscaperGetterDecorator::unescape($html)

Ответ 3 · рейтинг 9 · Vlad Jula-Nedelcu

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы