Symfony - Почему некоторые переменные экранированы, а другие нет? - PullRequest
2 голосов
/ 27 апреля 2011

В представлении Symfony 1.4 почему некоторые переменные экранированы, а другие нет?

У меня есть escaping_strategy = true и escaping_method = ESC_SPECIALCHARS.

Если я делаю

$this->form = new SearchForm();

тогда, на мой взгляд, $ form будет SearchForm. Или объекты модели также кажутся обычными объектами модели.

Но другие переменные, такие как массивы или MongoCursor, преобразуются в объекты sfOutputEscaper___Decorator, и я не могу напрямую получить доступ к необработанным методам. Почему?

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

1 Ответ

3 голосов
/ 28 апреля 2011

Существует множество классов, которые пропускают экранирование выходных данных (поскольку они в основном отображают HTML). По умолчанию sfView.class.php помечает следующее как безопасное:

sfForm, sfFormField, sfFormFieldSchema, sfModelGeneratorHelper

Таким образом, объекты или наследование от этих классов не будут экранированы.

Если вы посмотрите на соответствующий код в sfView.class.php, вы также найдете, как пометить дополнительные классы как безопасные, если вы хотите это сделать:

sfOutputEscaper::markClassesAsSafe(array('sfForm', 'sfFormField', 'sfFormFieldSchema', 'sfModelGeneratorHelper'));
...