0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Формирование HTML во фреймворках - отдельная тема. Не запрещено создавать HTML напрямую в виде строки, но такой способ перестает работать на реальных сайтах, где HTML одной страницы - это сотни, а то и тысячи строк.</p>
1
<p>Формирование HTML во фреймворках - отдельная тема. Не запрещено создавать HTML напрямую в виде строки, но такой способ перестает работать на реальных сайтах, где HTML одной страницы - это сотни, а то и тысячи строк.</p>
2
<p>Рассмотрим следующий пример:</p>
2
<p>Рассмотрим следующий пример:</p>
3
<p>У такого подхода есть следующие недостатки:</p>
3
<p>У такого подхода есть следующие недостатки:</p>
4
<ul><li>Он небезопасен и может привести к взлому. Подробнее эта тема рассматривается в конце курса</li>
4
<ul><li>Он небезопасен и может привести к взлому. Подробнее эта тема рассматривается в конце курса</li>
5
<li>С ростом количества HTML поддерживать такой код станет практически невозможно, так как неудобно анализировать и редактировать</li>
5
<li>С ростом количества HTML поддерживать такой код станет практически невозможно, так как неудобно анализировать и редактировать</li>
6
<li>В таком коде будут возникать постоянные проблемы с необходимостью экранировать одинарные или двойные кавычки</li>
6
<li>В таком коде будут возникать постоянные проблемы с необходимостью экранировать одинарные или двойные кавычки</li>
7
<li>В таком коде легко допустить ошибку в HTML и сложно ее обнаружить</li>
7
<li>В таком коде легко допустить ошибку в HTML и сложно ее обнаружить</li>
8
<li>В типичных сайтах большая часть HTML общая для разных страниц. Выделить ее с помощью подхода выше сложно</li>
8
<li>В типичных сайтах большая часть HTML общая для разных страниц. Выделить ее с помощью подхода выше сложно</li>
9
</ul><p>Для решения подобных задач придумали<strong>шаблонизаторы</strong>- специализированные библиотеки, которые позволяют описывать шаблон отдельно от остальной части кода. Мы будем использовать<em>slim/php-view</em>, который установили ранее.</p>
9
</ul><p>Для решения подобных задач придумали<strong>шаблонизаторы</strong>- специализированные библиотеки, которые позволяют описывать шаблон отдельно от остальной части кода. Мы будем использовать<em>slim/php-view</em>, который установили ранее.</p>
10
<p>Измените настройку Slim в начале файла<em>public/index.php</em>так, как показано в примере:</p>
10
<p>Измените настройку Slim в начале файла<em>public/index.php</em>так, как показано в примере:</p>
11
<p>В этих строчках происходит подключение шаблонизатора к Слиму с помощью<a>DI Container</a>. Наши шаблоны будут храниться в директории<em>templates</em>в корне проекта.</p>
11
<p>В этих строчках происходит подключение шаблонизатора к Слиму с помощью<a>DI Container</a>. Наши шаблоны будут храниться в директории<em>templates</em>в корне проекта.</p>
12
<p>Далее добавьте еще один обработчик:</p>
12
<p>Далее добавьте еще один обработчик:</p>
13
<p>Метод render() выполняет рендеринг указанного шаблона и добавляет результат в ответ. Сама функция принимает на вход три параметра:</p>
13
<p>Метод render() выполняет рендеринг указанного шаблона и добавляет результат в ответ. Сама функция принимает на вход три параметра:</p>
14
<ol><li>Объект ответа</li>
14
<ol><li>Объект ответа</li>
15
<li>Путь до нужного шаблона внутри директории<em>templates</em></li>
15
<li>Путь до нужного шаблона внутри директории<em>templates</em></li>
16
<li>Набор параметров, которые будут доступны внутри шаблона. Сюда можно передавать все что угодно</li>
16
<li>Набор параметров, которые будут доступны внутри шаблона. Сюда можно передавать все что угодно</li>
17
</ol><p>Добавьте файл<em>templates/users/show.phtml</em>со следующим содержимым:</p>
17
</ol><p>Добавьте файл<em>templates/users/show.phtml</em>со следующим содержимым:</p>
18
<p>Расширение<em>phtml</em>используют, когда хотят показать, что внутри файла содержится шаблон на PHP. В остальном файл рассматривается как обычный файл с кодом на PHP.</p>
18
<p>Расширение<em>phtml</em>используют, когда хотят показать, что внутри файла содержится шаблон на PHP. В остальном файл рассматривается как обычный файл с кодом на PHP.</p>
19
<p>Теперь откройте браузер и попробуйте загрузить страницу<em><a>http://localhost:8080/users/nick</a></em>.</p>
19
<p>Теперь откройте браузер и попробуйте загрузить страницу<em><a>http://localhost:8080/users/nick</a></em>.</p>
20
<p>Вместо кода <?= $id ?> на экране появилось значение переменной $id. Это произошло, потому что шаблонизатор берет массив $params, который передается третьим параметром в метод render() и создает внутри шаблона локальную переменную на каждый ключ этого массива. Причем имя переменной и ключа совпадают.</p>
20
<p>Вместо кода <?= $id ?> на экране появилось значение переменной $id. Это произошло, потому что шаблонизатор берет массив $params, который передается третьим параметром в метод render() и создает внутри шаблона локальную переменную на каждый ключ этого массива. Причем имя переменной и ключа совпадают.</p>
21
<p>Этот принцип работает всегда. Если нужно вывести данные на странице, то их добавляют в массив $params и обращаются к ним в шаблоне через переменные.</p>
21
<p>Этот принцип работает всегда. Если нужно вывести данные на странице, то их добавляют в массив $params и обращаются к ним в шаблоне через переменные.</p>
22
<p>Этой тактики следует придерживаться и для суперглобальных массивов. По понятным причинам их можно использовать напрямую:</p>
22
<p>Этой тактики следует придерживаться и для суперглобальных массивов. По понятным причинам их можно использовать напрямую:</p>
23
<p>Но делать так нельзя. Такой код значительно сложнее в отладке и потенциально опасен. Подробнее об этом дальше по курсу.</p>
23
<p>Но делать так нельзя. Такой код значительно сложнее в отладке и потенциально опасен. Подробнее об этом дальше по курсу.</p>
24
<h2>Собирая все вместе</h2>
24
<h2>Собирая все вместе</h2>
25
<p>Теперь, когда мы добавили поддержку шаблонов во фреймворк, появляется способ создавать нетривиальные сайты. Ниже пример обработчика и шаблона для вывода курсов:</p>
25
<p>Теперь, когда мы добавили поддержку шаблонов во фреймворк, появляется способ создавать нетривиальные сайты. Ниже пример обработчика и шаблона для вывода курсов:</p>
26
<p><strong>Обработчик</strong></p>
26
<p><strong>Обработчик</strong></p>
27
<p><strong>Шаблон</strong></p>
27
<p><strong>Шаблон</strong></p>
28
28