у меня поля форм строятся с помощью хэлперов. DOM сам все там экранирует. так что это не вариант - шаблону нужны сырые данные.искейп должен происходить АВТОМАТОМ, для всех передаваемых в шаблонизатор переменных
разве это не так? до появления всех этих оберток так и было - addslaches"безопасность составления SQL запросов лежит на программисте. Сам руками не отформатировал - сам и виноват".
я делал проще - не эксейпил переменные с префиксом html_Шаблонизатор (native PHP) должен всегда принимать на вход две переменные - массив данных и имя файла с шаблоном, и одну необязательную - список переменных, которые искейпить не надо.
По массиву проходим рекурсивно, и всё искейпим.
божественензацените дизайн!
Как по мне - подход не правильный.у меня поля форм строятся с помощью хэлперов. DOM сам все там экранирует. так что это не вариант - шаблону нужны сырые данные.
моё имхо - не должно.ИМХО по дефолту всё должно экранироваться.
как вариант завернуть аргументы в объекты класса с одним своим методом, типа getOriginalValue()
Эскейпить их при View->set() и не эскейпить при View->raw() ?в том же твиге все с автоескейпингом красиво: {{ var }} компилится в htmlspecialchars($var), {{ var|raw }} - в $var.
как это красиво сделать для native-php, я не знаю.
А если объект? Или хотя бы массив, в котором только часть данных надо эскейпить? Или во View только скалярные типы передавать?Эскейпить их при View->set() и не эскейпить при View->raw() ?
Просто только-что возникшая мысль:в том же твиге все с автоескейпингом красиво: {{ var }} компилится в htmlspecialchars($var), {{ var|raw }} - в $var. как это красиво сделать для native-php, я не знаю.
А если объект?
$var->someValue // ескейпится
$var->raw();
$var->raw()->someValue; //не ескейпится
Объект, переданный в шаблон почти всегда — модель. Ее надо будет тоже научить автоэскейпингу.А если объект?
а можно спросить - зачем это всё делать?На входе заворачиваем их в объект обертку.
Если это массив - то заворачиваем рекурсивно.
В обертке юзаем магическкие методы, чтобы проескейпить свойства объектов при обращении типа.
НЕ НАДО это делать. Ни в твиге, ни в native-php.как это красиво сделать для native-php, я не знаю.