Подскажите, какой шаблонизатор более актуальный в данное время Twig или Smarty? Слышал что Smarty уже не торт. Это так? Какие преимущества у Twig?
Раньше я правил Smarty, убирал косяки, чтобы пользоваться самому. Ибо писали его очень криво. Потом код улучшился. Видимо всвязи с популярностью пришли новые кодеры. Но вот осадок остался.
И оно за собой тянет хрен знает сколько говна лишнего. Я не готов платить столько за довольно спорную блажь, без которой можно жить, не зная горя и проблем. У меня чисто система, к примеру, весит 120кб. Без обвеса. В то время как чисто смарти весит метр с лишним. Нет уж, спасибо.
Отделять код от разметки можно и без шаблонизатора а-ля смарти. По мне большой разницы нету между Код (Text): Hello, {$name} и Код (Text): Hello, <?php echo $name; ?> Первое всё равно превратится во второе, зато для второго не нужно дополнительный модуль устанавливать, и тратить время на компиляцию шаблона в php
Компиляция происходит только один раз, дальше все берется из кэша. Шаблонизаторы - это из той же оперы, что и фреймворки. Можно городить свои велосипеды аргументируя это тем что "оно экономит 100кб и 2 миллисекунды", а можно взять нормальный пакет и писать логику приложения вместе очередной подпорки для своего костыля.
Тема реально провоцирующая на флейм. Никто никого слушать не будет ))) И тем не менее наброшу от себя: из реального проекта. перекрытие шаблонов возможно и в "нативных" шаблонах. Код (PHP): <?php $this->extend('main'); ?> … <?php $this->beginBlock('menu'); ?> Реализация перекрытия шаблонов умешается на одном экране без скроллинга: буфферизация, стек имен шаблонов, инклуд имени из стека. Кстати, не факт. Зависит от конфигурации. Возможна и такая конфигурация, когда твиг будет игнорировать изменившиеся шаблоны. Короче, он не только упрощает, но и усложняет ))) А отладка это вообще отдельная боль. У твига есть ровно одно достоинство: синтаксис его языка похож на синтаксис django templates. Кому хочется такой синтаксис, тот использует твиг.
Ну дык на продакшн включаешь кэш, у себя - не включаешь. На счет боли - ты просто Blade не видел, вот там да, головняк ) Вообще, я не спорю что можно написать всё свое, родное (с), но: 1. Используя свои инструменты мы автоматически замыкаем все на себя, т.к. никто без особой мотивации не будет разбираться в наших велосипедах. 2. Мы вынуждены поддерживать и допиливать свой код, вместо занятия реальной работой. Для себя я сделал вывод, что если сообщество использует что-то, дорабатывает и улучшает, то лучше присоединиться и не тратить свое время на бесполезные вещи. Ну а чисто в академических целях я вот к примеру тыкаю руби с его фреймворками, больше пользы )
это верно — в Тулу со своим самоваром не ходят. а если мы в небольшой команде трудимся над закрытым проектом, мы сами решаем что полезно. в любом случае, классы должны быть слабо связаны и замена шаблонизатора не должна стать проблемой.
У шаблонизатора есть важное преимущество - автоэскейпинг. Для контуженных - отключаемое по конкретной переменной, конечно. Защищает от массы XSS авторства различных самонадеянных программистов.
По моему нескромному мнению, это преимущество из разряда маркетинга. Примерно как тезис о невьебенной скорости скомпилированных шаблонов. На поверку оказывается не очень удобно. Страница это не SQL-запрос. Тут далеко не всё надо экранировать. Вот на этой странице надо экранировать два поля: имя пользователя и заголовок темы. Если экранировать текст на выходе из bbcode parser, то форум превратится в говно. Остальные 100500 полей экранировать безопасно, но и бессмысленно, только процессорное время жрать зазря. И вот, у нас автоматический эскейпинг всего-всего. Но после первой неудачи мы понимаем, что большую часть значений надо отметить как исключение. Помоему глупо. Есть еще "достоинство" от фабьена: песочница. Ограниченный набор функций, которые можно употреблять в шаблоне. Такое впечатление, что мы разрешаем писать часть программы (а шаблоны это важная часть программы!) то ли идиоту, то ли диверсанту.
Только про процессорное время не нужно, я умоляю. Как же любят тут ахинею нести, а... вы, наверно, из тех, кто скорости if и switch сравнивает? Те, кому важно процессорное время - не пишут на PHP. Забытое отключение эскейпинга - это в худшем случае испорченный вид сайта, который легко увидеть глазами и сделать исправления. Забытый эскейпинг же вы глазами не увидите в большинстве случаев, пока вас не поломают. А если вы безгрешен (хахаха), то какой-нибудь сегодняшний гордо зовущий себя "мидл" со знаниями юниора - нет. Так что вы, как лучшей представитель форума пхп.ру, можете отрицать очевидное, но тем самым лишь свою квалификацию показываете. Именно так.
пальцем в небо. зато я могу сравнить Код (PHP): <?= $collector->controller ?> с Код (PHP): echo twig_escape_filter($this->env, $this->getAttribute((isset($context["collector"]) ? $context["collector"] : $this->getContext($context, "collector")), "controller"), "html", null, true); функция twig_escape занимает 145 строк. переменная $this->env сделана для эмуляции наследования: хоть в скомпилированных шаблонах есть слово class, для перекрытия шаблонов буквально наследование не используется. "области видимости" вычисляется манипуляциями с массивами во время исполнения. короче, всё ОЧЕНЬ дорого) самое печальное, что эти горы ничего не гарантируют. идиот всё равно найдет где накосячить. спасибо за грубую лесть! я имею свое мнение, если у вас есть свое — выскажите его, пожалуйста. Добавлено спустя 3 минуты 38 секунд: на самом деле я не призываю отказываться от Twig или любого другого шаблонизатора. я только провоцирую обсуждение. есть разница между мнением и привычкой.
Я высказал. Людям свойственно забывать. Причем, вне зависимости от квалификации. По многим причинам. Один убыток из-за прошедшего XSS может стоить на несколько порядков больше, чем все сэкономленное процессорное время ваших спичек. И это нормальная ситуация, когда программисту дается комфортная среда для работы. Вот грозить штрафами и увольнениями за пропущенную дыру - не комфортно, а сделать, что бы риск появления такой дыры был минимален - комфортно. Сравнивайте сколько влезет. Только откуда у вас там объект? ООП - это же медленно, вы запороли проект.
вы высказали чужое мнение + пачку ярлыков мне попытались приклеить. где аргументы, где доказательства? А поручая идиотам писать шаблоны, вы не подвергаетесь риску? ))) Добавлено спустя 5 минут 8 секунд: возвращаясь к теме Twig. Нынешний тренд — всё, что исходит от Фабьена Потенсье. Держись его стороны всякий раз, когда есть сомнения. Добавлено спустя 1 минуту 22 секунды: То, что дядя артудиту здесь наговорил, это для размышлений, а не для выбора актуального.
Решил обойтись без шаблонизатора. В документации написано что короткие теги "<?= ?>" Скажите, стоит ли использовать эти теги? Чаще всего эти теги включены на хостингах, или нет?
не стоит, потому что везде по-разному. А еще с этими тегами могут быть проблемы при работе с XML. Советую почитать документацию поshodt_tags.