Native-PHP шаблонизатор и приватные свойства объектов

HraKK

Мудак
Команда форума
С другой - у модели и у объекта, передаваемого в шаблон, разные задачи, в общем-то. И тащить всю эту кухню с котлами и вошебойкой в шаблон - тоже некрасиво.
Сфигли? Я же надеюсь у тебя есть интерфейсы. Напоминаю что один и тот же объект может иметь множество интерфейсов. Вот передаешь этот объект по этому конкретному интерфейсу и будет все ок. (да, да я знаю что в пхп разницы нет, но идеологически). Хотя я б, забил если честно :(

Щас у меня в голове шевелится что-то вроде мини-модели, объекта, содержащего только скаляры.
Я так в C# использую, у меня модели содержат структуры внутри себя, где я храню данные. А не внутри модели. Так удобнее и сразу сериализовать\десериализовать в монгу получается.
 

Absinthe

жожо
что нельзя сделать автоматический эскейпинг - лично мне он не разу не нужен был, где надо пишешь автоматом, как при написании SQL запроса
А потом повсюду SQLi и XSS.

Надо подумать как вклиниться: написать свой простенький шаблонизатор, который отлавливает обращения к переменным, берет объекты, присвоенные из контроллера, и прозрачно искейпит их перед выводом.
Думал над такой задачей и понял что она нерешаема. Через прокси не выйдет сделать экранирование, когда значение используется для вычислений (к примеру, операция +). Остальные ситуации с помощью прокси решить можно.
 

Absinthe

жожо
С другой - у модели и у объекта, передаваемого в шаблон, разные задачи, в общем-то. И тащить всю эту кухню с котлами и вошебойкой в шаблон - тоже некрасиво.
Почему же плохо?
Шаблон может запрашивать данные модели. Это нормально.
 

Absinthe

жожо
Как часто перед едой мяса вы забываете приготовить его и едите сырым? Все дело в приоритетах и отношениях.
Если мясо нарезано тонкими кусками и внутри бутербродов (визуально не отличить), а повар изредка забывает его приготовить, вероятность такого исхода явно ненулевая.
 

HraKK

Мудак
Команда форума
В принципе согласен. Но все равно, для обычных проектов не откажусь от такого подхода):rolleyes:

Правда я завязал еще года 3-4 назад с обычными проектам)
 

Absinthe

жожо
Автоэкранирование уже давно по умолчанию работает во всех поддерживаемых фреймворках.
Причина простая: минусов нет, плюсы есть.

Человек не робот и рано или поздно допустит ошибку.
 

Фанат

oncle terrible
Команда форума
Как часто перед едой мяса вы забываете приготовить его и едите сырым? Все дело в приоритетах и отношении.
При всём уважении, но толкай, плиз, эту ересь где-нибудь в другом месте :)
 

Absinthe

жожо
Можно сравнение сделать такое: native templates = запрос из кусочков строк, нормальный шаблонизатор = prepared statements.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
сколько оно мне экономило времени
Мы недавно переписывали такую экономию :)
На страничке каталога дергались данные из AR-моделей по связям, каждая вызывала Lazy Load - запрос. 100 запросов на страничку выходило.
Переписали на JOIN-ы - генерация ускорилась с 0.5 до 0.2
Ну, это особый случай, конечно, там когда-то и сессии в базе были.

Если мясо нарезано тонкими кусками
то оно называется карпаччо! :D

Думал над такой задачей и понял что она нерешаема. Через прокси не выйдет сделать экранирование, когда значение используется для вычислений (к примеру, операция +). Остальные ситуации с помощью прокси решить можно.
Значения для операций надо не экранировать как-раз. А пример решения Фиксер даже привел.
 
Последнее редактирование:

HraKK

Мудак
Команда форума
Переписали на JOIN-ы - генерация ускорилась с 0.5 до 0.2
Переписали на джойны, убрали возможность шардинга.

Мы же добавили прозрачный кеш + шардинг и скорость генерации ускорилось с 0.5 до 0.01
 
  • Like
Реакции: AmdY

grigori

( ͡° ͜ʖ ͡°)
Команда форума
HraKK, объем работы на шардинг и join-ы различается на порядок. Кешировать можно и результат запроса с join-ами, а лучше - страницы каталога целиком в виде html в memcached за nginx - скорость упрется в сетевую инфраструктуру, но узкое место сейчас в сессиях.
 
Последнее редактирование:

HraKK

Мудак
Команда форума
объем работы на шардинг и join-ы различается на порядок
Я как бы и не спорил что JOINы сделать сложнее.

узкое место сейчас уже в сессиях
Которые в мемкеше? Боюсь, спросить тогда почему.

П.С. 0.2с это как бы дофига, если что.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Я как бы и не спорил что JOINы сделать сложнее.
У нас Yii с AR, дописали with со списком таблиц, и все. Шардинг на Yii поддерживать сложнее.

Которые в мемкеше? Боюсь, спросить тогда почему.

П.С. 0.2с это как бы дофига, если что.
Да, я знаю, это наследство, начали с 5 секунд.
В сессии узкое место потому что в ней хранится уникальный порядок элементов каталога для каждого посетителя.
Перепишем - будет кеширование.
 

AnrDaemon

Продвинутый новичок
Автоэкранирование уже давно по умолчанию работает во всех поддерживаемых фреймворках.
Причина простая: минусов нет
Потом любуешься на очередную статью, вываленную таким фреймворком, и пытаешься разобрать смысл слов между &whatever;...

(И, да, я помню нашу предыдущую дискуссию на эту тему.)
 

seyfer

Новичок
Шаблонизаторы не нужны. Только native php, zend framework style.. :rolleyes:

зы. ну паттерны и хелперы ни кто не отменял при этом
 
Сверху