#symfony1 #symfony-1.4
#symfony1 #symfony-1.4
Вопрос:
В представлении Symfony 1.4, почему некоторые переменные экранируют выходные данные, а другие нет?
У меня есть escaping_strategy = true и escaping_method = ESC_SPECIALCHARS.
Если я сделаю
$this->form = new SearchForm();
тогда, на мой взгляд, $form будет формой поиска. Или объекты модели также, похоже, проходят как обычные объекты модели.
Но другие переменные, такие как массивы или MongoCursor , преобразуются в объекты sfOutputEscaper___Decorator , и я не могу получить прямой доступ к необработанным методам. Почему?
Я понимаю, что могу получить исходную переменную, а затем использовать ее методы, но сейчас для меня это игра в угадайку, что расстраивает.
Ответ №1:
Существует множество классов, которые будут пропускать любые экранирования выходных данных (потому что они в основном отображают HTML). По умолчанию sfView.class.php пометит следующее как безопасное:
sfForm, sfFormField, sfFormFieldSchema, sfModelGeneratorHelper
Таким образом, объекты этих классов или наследующие от них, не будут экранированы на выходе.
Если вы посмотрите на соответствующий код в sfView.class.php вы также найдете, как пометить дополнительные классы как безопасные, если вы хотите это сделать:
sfOutputEscaper::markClassesAsSafe(array('sfForm', 'sfFormField', 'sfFormFieldSchema', 'sfModelGeneratorHelper'));
Комментарии:
1. А, спасибо. Я также вижу, что сбивало меня с толку … sfOutputEscaperObjectDecorator выполняет волшебный метод __call, который заставлял меня думать, что он не экранируется. Но мои вызовы count() возвращали 1. Это потому, что он не вызывал метод count() MongoCursor, потому что у sfOutputEscaperObjectDecorator есть свой собственный!