Веб-разработка на PHP
2026-02-26 20:36 Diff

Формирование HTML во фреймворках — отдельная тема. Не запрещено создавать HTML напрямую в виде строки, но такой способ перестает работать на реальных сайтах, где HTML одной страницы — это сотни, а то и тысячи строк.

Рассмотрим следующий пример:

У такого подхода есть следующие недостатки:

  • Он небезопасен и может привести к взлому. Подробнее эта тема рассматривается в конце курса
  • С ростом количества HTML поддерживать такой код станет практически невозможно, так как неудобно анализировать и редактировать
  • В таком коде будут возникать постоянные проблемы с необходимостью экранировать одинарные или двойные кавычки
  • В таком коде легко допустить ошибку в HTML и сложно ее обнаружить
  • В типичных сайтах большая часть HTML общая для разных страниц. Выделить ее с помощью подхода выше сложно

Для решения подобных задач придумали шаблонизаторы — специализированные библиотеки, которые позволяют описывать шаблон отдельно от остальной части кода. Мы будем использовать slim/php-view, который установили ранее.

Измените настройку Slim в начале файла public/index.php так, как показано в примере:

В этих строчках происходит подключение шаблонизатора к Слиму с помощью DI Container. Наши шаблоны будут храниться в директории templates в корне проекта.

Далее добавьте еще один обработчик:

Метод render() выполняет рендеринг указанного шаблона и добавляет результат в ответ. Сама функция принимает на вход три параметра:

  1. Объект ответа
  2. Путь до нужного шаблона внутри директории templates
  3. Набор параметров, которые будут доступны внутри шаблона. Сюда можно передавать все что угодно

Добавьте файл templates/users/show.phtml со следующим содержимым:

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

Теперь откройте браузер и попробуйте загрузить страницу http://localhost:8080/users/nick.

Вместо кода <?= $id ?> на экране появилось значение переменной $id. Это произошло, потому что шаблонизатор берет массив $params, который передается третьим параметром в метод render() и создает внутри шаблона локальную переменную на каждый ключ этого массива. Причем имя переменной и ключа совпадают.

Этот принцип работает всегда. Если нужно вывести данные на странице, то их добавляют в массив $params и обращаются к ним в шаблоне через переменные.

Этой тактики следует придерживаться и для суперглобальных массивов. По понятным причинам их можно использовать напрямую:

Но делать так нельзя. Такой код значительно сложнее в отладке и потенциально опасен. Подробнее об этом дальше по курсу.

Собирая все вместе

Теперь, когда мы добавили поддержку шаблонов во фреймворк, появляется способ создавать нетривиальные сайты. Ниже пример обработчика и шаблона для вывода курсов:

Обработчик

Шаблон