PHP: Laravel
Теория: Шаблонизатор Blade
Мы знаем из курса по веб-разработке, что PHP это не только язык программирования, но и шаблонизатор. Он позволяет использовать PHP- и HTML-код в одном файле, формируя из этого общий ответ в консоль или браузер пользователя. Это одна из важных причин его популярности, но за все приходится платить.
Когда создавался PHP, интернет только начинал свой путь. Разработчики PHP в то время о многих вещах либо не знали, либо не подумали. Это привело к серьезным проблемам, с которыми придется жить всегда, потому что никто не будет ломать обратную совместимость. К таким проблемам относится безопасность. Обычные PHP-шаблоны по умолчанию не безопасны. Любой текст из кода вставляется как есть. Это значит, что если специально об этом не подумать, то сайт станет подвержен XSS-атаке. Она выполняется через внедрение JS-кода на страницу, который начинает работать, а не отображаться как текст:
Есть способы избежать этого, но все они требуют постоянного внимания. С точки зрения организации безопасной среды это в корне неверно и гарантированно будет приводить к ошибкам. Должно быть ровно наоборот: по умолчанию все безопасно и только там где нужно, поведение меняется.
Можно ли как-то изменить эту ситуацию? Да, первый путь это изменение самого языка. Этот путь, которым никто никогда не пойдет. Такое изменение гарантированно сломает все существующие сайты. Другой путь – создание шаблонизаторов, написанных на PHP. Именно так и делают уже очень много лет.
В итоге то, что помогло PHP взлететь, теперь только мешает и создает у многих несерьезное отношение к языку. До сих пор можно встретить людей, которые говорят, что PHP это не язык программирования, а шаблонизатор.
За время существования PHP были созданы десятки только популярных шаблонизаторов и сотни тех, что не взлетели. Со временем они развивались и становились лучше. Когда-то популярный Smarty сейчас уже никто не вспомнит. А вот Blade, входящий в состав Laravel, знают почти все.
Это на самом деле важно, потому что до сих пор огромное число сайтов и CMS используют встроенную шаблонизацию PHP. Как по историческим причинам, так и из-за общей низкой культуры разработки и кустарного обучения программированию. Стоит ли говорить о том, что большинство этих сайтов легко взломать.
Посмотрите на пример простого Blade-шаблона:
На первый взгляд похоже, что шаблон выглядит как HTML, но со вставками кода. В отличие от самого PHP, в Blade вставка любого значения выполняется в двойных фигурных скобках {{ ... }}. Это очень похоже на интерполяцию, если сам шаблон рассматривать как строку. Под капотом Blade выполняет дополнительную обработку и экранирует любые данные, вставленные таким образом. Это значит, что нам больше не нужно прилагать усилия к обеспечению безопасности в шаблонах.
Откуда в этом шаблоне взялся $object? Вспомним код обработчика:
Такой вариант использования шаблонов подходит только для простых информационных страниц, в которых нет динамического содержимого (получаемого, например, из базы). В большинстве же реальных ситуаций контроллер получает какие-то данные, обрабатывает их, если нужно, и передает в шаблон. Делается это крайне просто, достаточно передать ассоциативный массив с данными вторым параметром функции view. В шаблоне каждое значение этого массива становится доступно под именем переменной, соответствующей ключу массива:
Как видно из примера выше, двойные фигурные скобки позволяют выполнять произвольный PHP-код. Главное — не злоупотреблять. В основном данные должны быть подготовлены в обработчике до того, как они попадут в шаблон. Тут стоит сказать отдельно, что PHP как шаблонизатор давал слишком много свободы, которая очень влияла на качество кода. При таком использовании PHP, в шаблоне нередко выполнялись SQL-запросы, HTTP-вызовы и т.п. По понятным причинам этого делать ни в коем случае нельзя: шаблоны про отображение, а не про логику работы.
Кроме подстановки, в Blade есть директивы. С их помощью реализованы все управляющие конструкции, такие как циклы, условия и многое другое:
Директивы всегда начинаются со знака @ и часто (но не всегда) имеют закрывающую часть. Синтаксис директив содержит меньше деталей и он проще чем синтаксис чистого PHP. С его помощью можно делать практически все то же самое, что и в самом PHP. Более того, можно сказать, что Blade фактически является самостоятельным языком программирования. Но лучше про это сразу забыть
Blade имеет встроенную поддержку разных полезных фич. То, что в шаблонах на PHP нужно делать вручную, тут уже есть из коробки. К таким возможностям, например, относится определение первой и последней итерации в цикле:
Кроме указанных структур, директивы Blade поддерживают цикл for, switch, isset и некоторые другие, более специфичные. Часть из них будет рассмотрена дальше, в уроках посвященных макетам и формам.
.png)


