Давайте разберем тропы, связанные с этой темой:
1. Не допускайте логики в презентацию - не вставляйте «код» в ваш HTML
Любой, кто говорит это, а затем говорит вам использовать шаблоны, является противоречивым:
- PHP - это интерпретируемый язык - он становится кодом C при исполнении.
- Шаблонный синтаксис интерпретируется в PHP
Они должны перестать лгать самим себе.Их «шаблонный синтаксис» - это язык программирования, построенный поверх другого, который, в свою очередь, построен поверх еще другого языка - это неэффективно, избыточно и странно .
Кроме того, я не вижу, как само существование переменных , от которых зависит каждый шаблонизатор, от которого когда-либо зависели, не считается логикой - их существование, содержание и реализация зависят от логический бэкэнд.
И что из этих шаблонных систем с , если / else операторов и для циклов?Это сама суть логики - те самые понятия, которые используются в большинстве языков программирования .Они требуют переменных данных, которые могут быть сгенерированы или существовать только в какой-либо форме вычислений.
Вы не можете обслуживать динамический контент, не смешивая представление с логикой.Это невозможно.
2,1 Это безопаснее ...
Итак, вы не доверяете ваш парень по HTML?
Дело: Вы думаете, что ваш парень по HTML / CSS глупый и случайно напечатает пароль базы данных
Если это так, у меня естьновость для вас - ваша среда уже небезопасна, если к чувствительным данным можно получить доступ или изменить их из любой точки программы.
Случай: Вы думаете, что ваш парень из HTML будет печатать случайные серверные константы - этоопасно позволять ему, как частному лицу, работать с серверной логикой
Понятно - он либо глуп, либо ненавидит свою работу и хочет быть уволенным и поэтому будет делать что-то глупое, например, печать переменных сеанса.Хорошо, но на это я скажу ...
... Какого черта этот материал не рецензируемый ?Даже если бы у него не было доступа к прямой серверной логике, а была бы причудливая система шаблонов, он все равно мог бы в равной степени распространять свою глупость / ненависть только потому, что он имеет решающее право голоса на выходе.Или он может даже быть в сговоре с другим программистом (если есть) и по-прежнему иметь доступ к серверным константам и другим.
-
2.2.1 Хорошие шаблоныДвижки автоматически очищают вывод или позволяют шаблонисту делать это самому - он лучше знает, когда нужно выполнить очистку данных
Ты дурак.
Ты не знаешь, когда вывод долженбыть продезинфицированы?Вы не могли бы сделать это сами ..?
Несмотря на это, может быть, вы просто обезьяна кода, а парень по HTML - специалист по веб-безопасности HTML-инъекций, и он долженбыть единственным дезинфицирующим выходом.В этом случае предоставление ему доступа к PHP также позволяет ему использовать подобные htmlspecialchars()
вместо того, что шаблон дает ему делать то же самое.
Относительно автоматического побега при условии, что вы безопасно передавая контент, вы можете реализовать такую простую функцию в коде, который вы делаете.
-
2.2 ...и я могу контролировать, с какими данными работают
Подумайте о классах, функциях и т. д. - Вы добавляете данные, они работают с ними, а затем вы получаете результат.Как правило, они не имеют дело с внешними данными, если они не переданы им (в противном случае непонятная, опасная и плохая практика - некоторые константы в стороне).С помощью этих же методов вы можете точно передать то, что вам нужно, в эффективном, ясном и неограниченном поместье.
-
Все это говорит о том, что вы думаете, что ваш движок шаблонов более безопасен, чем простой код, потому что вам не хватает нескольких областей общей безопасности :
- Вы (или кто-либо другой) не рецензируют контент - Вы разрешаете частным лицам выводить контент.
- Вы не реализуете надлежащие или безопасные методы программирования и, похоже, не понимаете, что можете контролировать то, что передается из точки A в B .
3. Синтаксис PHP слишком сложен / труден, чтобы учить людей стиля
Правда в том, что он не сложнее, чем псевдосинтаксис, созданный системами шаблонов, такими как Smarty, поэтому, если это проблема, динамический контент не для вас.
Следующее в PHP "короткий синтаксис" - это слишком сложно?
<div class='username'><?= $username ?></div>
4. Слишком много работы для разработки моего собственного решения
Хотя я бы сказал, что это не так, вы можете выбирать все, что пожелаете! Выберите то, что соответствует вашим потребностям лучше всего. Они, как правило, бесплатны, их нетрудно интегрировать, и они поставляются с множеством функций из коробки.
У меня сложилось впечатление, что большинство людей выбирают шаблоны просто потому, что они выглядят «аккуратно» внутри файла - им нравится думать, что файл TPL - это нечто особенное, что они создали, им нравится, как выглядит синтаксис; Как будто каким-то волшебством, переменная «вызывается» маленьким символом @
или #
и переходит из вашей логики в вывод.
Это похоже на уловку - Прекрасная волшебница ( AKA Шаблонный движок ) привлекает вас своей красотой. Хотя она привлекательна для глаз, она на самом деле кровососущий демон и извлекает вашу душу ( Ресурсы сервера ) в обмен на глазные конфеты, которых никто не видит (у ваших пользователей гораздо быстрее будет веб-сайт и дополнительные функции, финансируемые за счет $$$, который вы экономите на аренде питания / сервера)
<title>{{@title}}</title>
Vs
<title><?= $title ?></title>
Признаюсь, есть только один случай, когда я могу подумать о том, какие шаблоны имеют какое-либо отношение к PHP - Переносимость в другие приложения. Ответ Appartisan обращается к этому. Несмотря на это, несложно заменить <?= $var ?>
на {{@var}}
- Это работа для системы шаблонного типа.