Веб-разработка на PHP
Теория: Шаблонизатор
Формирование HTML во фреймворках — отдельная тема. Не запрещено создавать HTML напрямую в виде строки, но такой способ перестает работать на реальных сайтах, где HTML одной страницы — это сотни, а то и тысячи строк.
Рассмотрим следующий пример:
У такого подхода есть следующие недостатки:
- Он небезопасен и может привести к взлому. Подробнее эта тема рассматривается в конце курса
- С ростом количества HTML поддерживать такой код станет практически невозможно, так как неудобно анализировать и редактировать
- В таком коде будут возникать постоянные проблемы с необходимостью экранировать одинарные или двойные кавычки
- В таком коде легко допустить ошибку в HTML и сложно ее обнаружить
- В типичных сайтах большая часть HTML общая для разных страниц. Выделить ее с помощью подхода выше сложно
Для решения подобных задач придумали шаблонизаторы — специализированные библиотеки, которые позволяют описывать шаблон отдельно от остальной части кода. Мы будем использовать slim/php-view, который установили ранее.
Измените настройку Slim в начале файла public/index.php так, как показано в примере:
В этих строчках происходит подключение шаблонизатора к Слиму с помощью DI Container. Наши шаблоны будут храниться в директории templates в корне проекта.
Далее добавьте еще один обработчик:
Метод render() выполняет рендеринг указанного шаблона и добавляет результат в ответ. Сама функция принимает на вход три параметра:
- Объект ответа
- Путь до нужного шаблона внутри директории templates
- Набор параметров, которые будут доступны внутри шаблона. Сюда можно передавать все что угодно
Добавьте файл templates/users/show.phtml со следующим содержимым:
Расширение phtml используют, когда хотят показать, что внутри файла содержится шаблон на PHP. В остальном файл рассматривается как обычный файл с кодом на PHP.
Теперь откройте браузер и попробуйте загрузить страницу http://localhost:8080/users/nick.
Вместо кода <?= $id ?> на экране появилось значение переменной $id. Это произошло, потому что шаблонизатор берет массив $params, который передается третьим параметром в метод render() и создает внутри шаблона локальную переменную на каждый ключ этого массива. Причем имя переменной и ключа совпадают.
Этот принцип работает всегда. Если нужно вывести данные на странице, то их добавляют в массив $params и обращаются к ним в шаблоне через переменные.
Этой тактики следует придерживаться и для суперглобальных массивов. По понятным причинам их можно использовать напрямую:
Но делать так нельзя. Такой код значительно сложнее в отладке и потенциально опасен. Подробнее об этом дальше по курсу.
Собирая все вместе
Теперь, когда мы добавили поддержку шаблонов во фреймворк, появляется способ создавать нетривиальные сайты. Ниже пример обработчика и шаблона для вывода курсов:
Обработчик
Шаблон
.png)
