HTML Diff
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>Вместо кода &lt;?= $id ?&gt; на экране появилось значение переменной $id. Это произошло, потому что шаблонизатор берет массив $params, который передается третьим параметром в метод render() и создает внутри шаблона локальную переменную на каждый ключ этого массива. Причем имя переменной и ключа совпадают.</p>
20 <p>Вместо кода &lt;?= $id ?&gt; на экране появилось значение переменной $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