Зачем использовать шаблоны?

Почему я должен использовать систему шаблонов в PHP?

Зачем использовать систему шаблонов в PHP, если PHP сам является языком шаблонов?

Давайте сначала кратко вспомним историю этого языка, которая полна интересных поворотов. Одним из первых языков программирования, использовавшихся для генерации HTML-страниц, был язык Си. Однако вскоре стало очевидно, что использовать его для этих целей нецелесообразно. Поэтому Расмус Лердорф создал PHP, который облегчил генерацию динамического HTML с использованием языка C на задней панели. Изначально PHP был разработан как язык шаблонов, но со временем он приобрел дополнительные возможности и стал полноценным языком программирования.

Тем не менее, он по-прежнему функционирует как язык шаблонов. Файл PHP может содержать HTML-страницу, в которой переменные выводятся с помощью символов <?= $foo ?>, и т.д.

В начале истории PHP была создана система шаблонов Smarty, целью которой было строго отделить внешний вид (HTML/CSS) от логики приложения. Она сознательно предоставляла более ограниченный язык, чем сам PHP, так что, например, разработчик не мог сделать запрос к базе данных из шаблона и т.д. С другой стороны, он представлял собой дополнительную зависимость в проектах, увеличивал их сложность и требовал от программистов изучения нового языка Smarty. Такие преимущества были спорными, и обычный PHP продолжал использоваться для шаблонов.

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

Сегодня преимущества шаблонных систем значительно превосходят затраты, связанные с их внедрением. Поэтому имеет смысл их использовать.

Почему Latte лучше, чем Twig или Blade?

Есть несколько причин – некоторые из них приятные, а другие – чрезвычайно полезные. Latte – это комбинация приятного и полезного.

Сначала о приятном: Latte имеет тот же синтаксис, что и PHP. Единственное различие заключается в обозначении тегов, предпочитая более короткие { и } вместо <?= и ?>. Это означает, что вам не придется учить новый язык. Затраты на обучение минимальны. Самое главное, что во время разработки вам не придется постоянно “переключаться” между языком PHP и языком шаблонов, поскольку они оба одинаковы. Это отличается от шаблонов Twig, которые используют язык Python, заставляя программиста переключаться между двумя разными языками.

А теперь о чрезвычайно полезной причине: Все системы шаблонов, такие как Twig, Blade или Smarty, эволюционировали и включают защиту от XSS в виде автоматического экранирования. Точнее, автоматического вызова функции htmlspecialchars(). Однако создатели Latte поняли, что это совсем не верное решение. Это связано с тем, что разные части документа требуют разных методов экранирования. Наивное автоматическое экранирование – это опасная функция, потому что она создает ложное чувство безопасности.

Чтобы автоэскейпинг был функциональным и надежным, он должен распознавать, в какой части документа выводятся данные (мы называем это контекстами), и выбирать функцию эскейпинга соответствующим образом. Поэтому она должна быть чувствительной к контексту. И это то, что может сделать Latte. Он понимает HTML. Он не воспринимает шаблон как просто строку символов, а понимает, что такое теги, атрибуты и т. д. Поэтому он по-разному экранирует в HTML-тексте, внутри HTML-тегов, внутри JavaScript и т.д.

Latte – первая и единственная система шаблонов PHP с контекстно-зависимым экранированием. Она представляет собой единственную по-настоящему безопасную систему шаблонов.

И еще одна приятная причина: Поскольку Latte понимает HTML, он предлагает другие очень приятные возможности. Например, n:attributes. Или возможность проверки ссылок. И многое другое.

Что такое экранирование?

Эскейпинг – это процесс замены символов со специальным значением на соответствующие последовательности при вставке одной строки в другую для предотвращения нежелательных эффектов или ошибок. Например, при вставке строки в HTML-текст, в которой символ < имеет специальное значение, поскольку обозначает начало тега, мы заменяем его соответствующей последовательностью, которой является HTML-сущность &lt;. Это позволяет браузеру правильно отобразить символ <.

Простым примером экранирования непосредственно при написании PHP-кода является вставка кавычек в строку путем размещения перед ними обратной косой черты.

Более подробно мы обсуждаем экранирование в главе Как защититься от XSS.

Можно ли выполнить запрос к базе данных из шаблона Latte?

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

Иная ситуация возникает, если вы хотите предоставить клиентам или внешним программистам возможность редактировать шаблоны. В этом случае вы определенно не захотите, чтобы они имели доступ к базе данных. Конечно, вы не будете передавать объект базы данных в шаблон, но что, если к нему можно получить доступ через другой объект? Решением является режим песочницы, который позволяет вам определить, какие методы могут быть вызваны в шаблонах. Благодаря этому вы можете не беспокоиться о нарушениях безопасности.

Каковы основные различия между такими системами шаблонов, как Latte, Twig и Blade?

Различия между такими системами шаблонов, как Latte, Twig и Blade, в основном заключаются в их синтаксисе, безопасности и интеграции с фреймворками:

  • Latte: использует синтаксис языка PHP, что делает его более простым в изучении и использовании. Он обеспечивает первоклассную защиту от XSS-атак.
  • Twig: использует Python-подобный синтаксис, который значительно отличается от PHP. Он экранирует без различия контекста. Хорошо интегрирован с фреймворком Symfony.
  • Blade: использует смесь PHP и пользовательского синтаксиса. Не различает контекст. Он тесно интегрирован с функциями и экосистемой Laravel.

Стоит ли компаниям использовать систему шаблонов?

Во-первых, затраты, связанные с обучением, использованием и общими преимуществами, существенно различаются в зависимости от системы. Система шаблонов Latte, благодаря использованию синтаксиса PHP, значительно упрощает обучение для программистов, уже знакомых с этим языком. Обычно программисту требуется несколько часов, чтобы достаточно хорошо освоить Latte, что позволяет снизить затраты на обучение и ускорить освоение технологии и, что самое главное, эффективность в повседневном использовании.

Кроме того, Latte обеспечивает высокий уровень защиты от XSS-уязвимостей благодаря уникальной технологии контекстно-зависимого экранирования. Эта защита имеет решающее значение для обеспечения безопасности веб-приложений и минимизации риска атак, которые могут поставить под угрозу пользователей или данные компании. Безопасность веб-приложений также важна для поддержания хорошей репутации компании. Проблемы с безопасностью могут привести к потере доверия со стороны клиентов и нанести ущерб репутации компании на рынке.

Использование Latte также снижает общие затраты на разработку и сопровождение, упрощая и то, и другое. Поэтому использование системы шаблонов определенно стоит того.

Влияет ли Latte на производительность веб-приложений?

Хотя шаблоны Latte обрабатываются быстро, этот аспект не имеет особого значения. Причина в том, что парсинг файлов происходит только один раз во время первого показа. Затем они компилируются в PHP-код, сохраняются на диске и запускаются при каждом последующем запросе, не требуя повторной компиляции.

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

версия: 3.0