PSR-7 фреймворк: Шаблонизаторы и вёрстка
Пятый урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Пишем свой шаблонизатор с наследованием шаблонов через систему блоков и изучаем работу существующих:
Для более комфортного просмотра откройте скринкаст на YouTube, разверните видео до оригинального размера значком
и поставьте скорость 1,75:

Содержание:
- 00:00:00 - Вступление, повторение выводов предыдущего урока
- 00:07:12 - Ответ на вопрос: почему используют микрофреймворки?
- 00:12:10 - Цели и задачи урока
- 00:15:35 - Экранирование кода, htmlspetialcars
- 00:21:52 - Вынесение HTML-разметки в templates
- 00:23:31 - HelloAction
- 00:24:51 - Буферизация вывода HTML-кода
- 00:33:06 - Bootstrap с CDN
- 00:36:35 - Вынесение кода в метод render
- 00:38:59 - Передача имени представления
- 00:40:02 - Передача параметров
- 00:42:00 - Распаковка массива params
- 00:47:37 - Переменная templateFile
- 00:49:13 - Вынесение кода в класс TemplateRenderer
- 00:53:53 - Настройка папки с шаблонами
- 00:58:01 - Отладка тестов
- 01:01:53 - Добавление верстки
- 01:06:08 - Дописывание контроллеров
- 01:06:55 - HelloActionTest
- 01:07:58 - Вынесение интерфейса, PhpRenderer
- 01:11:11 - Вынос общего макета в layout, теория
- 01:20:07 - Вынос общего макета в layout, реализация
- 01:22:46 - Директивы extends и params
- 01:31:36 - Шаблон Columns
- 01:35:01 - Инкапсуляция render() и extend()
- 01:38:13 - Разные сайдбары в разных представлениях, буферизация ввода
- 01:42:28 - Инкапсуляция блоков
- 01:46:07 - Переписывание блоков на использование стека
- 01:49:19 - Контент блока по умолчанию
- 01:51:19 - Хлебные крошки в главном шаблоне
- 01:53:21 - Метатэги
- 01:54:29 - Перенос params в блок
- 01:57:07 - Перенос контента в блок
- 01:59:02 - Уникальность именования блоков
- 02:01:13 - Промежуточные итоги
- 02:03:23 - Переопределение блоков
- 02:08:44 - Проблема рендера пропускаемых блоков
- 02:11:46 - Инкапсуляция в метод ensureBlock()
- 02:15:52 - Альтернатива с анонимной функцией
- 02:20:22 - Ленивая загрузка блоков
- 02:23:22 - Инкапсуляция htmlspecialchars()
- 02:25:05 - Генерация адресов через маршрутизатор
- 02:34:33 - Страницы вывода блога
- 02:42:47 - Генерация страницы 404
- 02:45:03 - Страницы других ошибок
- 02:51:14 - Промежуточные итоги
- 02:53:12 - Плюсы, минусы и возможности шаблонизаторов, теория
- 03:04:36 - Нюансы выкладывания в публичный доступ, SOLID, теория
- 03:11:23 - Динамическое добавление методов, теория
- 03:14:44 - Отключение буферизации для вывода исключений
- 03:21:34 - Магический __call для вызова функций
- 03:25:44 - Подключение нашего маршрутизатора
- 03:29:21 - Вынесение функций в отдельные классы
- 03:32:40 - Метод addFunction()
- 03:34:31 - Инкапсуляция имени функции
- 03:37:32 - Добавление комплекта функции
- 03:39:51 - Замена анонимных функций на callback-и
- 03:41:25 - Класс Extention
- 03:43:28 - Переименование Function в Extention
- 03:47:50 - Передача рендерера и циклические зависимости
- 03:54:46 - Структура SimpleFunction
- 03:57:25 - Промежуточные итоги
- 04:00:13 - Готовый шаблонизатор Plates
- 04:04:16 - Недостатки шаблонизатора Plates
- 04:06:23 - Другие шаблонизаторы
- 04:10:05 - Шаблонизатор Twig, обзор
- 04:18:57 - Установка twig, переписывание представлений
- 04:27:47 - Использование в нашем коде, внутренности Twig
- 04:34:14 - Папки шаблонов и псевдонимы
- 04:37:10 - Twig в контейнере, адаптер TwigRenderer
- 04:42:42 - Кэширование сгенерированного кода
- 04:44:23 - Отключение кеширования в режиме разработки
- 04:45:56 - Функция dump() для отладки
- 04:47:36 - Перенос кода в контейнер
- 04:51:11 - RouteExtention для Twig
- 04:54:06 - Дополнительные опции расширений
- 04:59:19 - Всеядность Twig-а по работе с переменными
- 05:04:56 - Вынесение конфигурации шаблонизатора
- 05:08:25 - Вынесение массива расширений
- 05:10:43 - Вынесение в templates.global.php
- 05:11:55 - Проверка результата, внутренности Twig
- 05:26:25 - Подведение итогов
- Структура и работа с HTTP
- Контроллеры и маршрутизация
- Middleware и Pipeline
- Контейнер внедрения зависимостей
- Шаблонизаторы и вёрстка
- Обновление до PSR-15, вывод ошибок и логирование
- Консольные команды, базы данных и ресурсы
Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!
Mad AlexА свою ORM будем писать? Если нет, то очень жаль. Крутая тема для общего понимания была бы.
Русинов Артем – rusinov.proПлюсую. Мне бы тоже было очень интересна эта тема
ЕвгенийСпасибо за работу! Когда будет курс по Symfony? :)
Максим ФедоровОколо августа
ПавелПробую запустить вашу демо-shop-магазин
как только в UserControllere
устанавливаю
private $service; public function __construct($id, $module, UserManageService $service, $config = []) { parent::__construct($id, $module, $config); $this->service = $service; }так сразу же слетает все. Перестает работать. Хотя все установил. Никак не могу понять, почему это происходит.
ПавелВот что пишет:
Can not instantiate shop\dispatchers\EventDispatcher
Дмитрий ЕлисеевНе срабатывает конфигурация контейнера.
slo_nikДобрый вечер.
А когда будет шестая часть?
ЭдуардДмитрий можете поделиться, как вы в видео перескакиваете на коммиты на следующие?
Когда вводишь git log, то видишь только текущий и предыдущие коммиты. Как найти быстро хеш следующего коммита?
Допустим есть ветка мастер. Ты переключаешься на самый первый коммит. и все - в git log только он и остается. А как потом на второй, третий переключиться?
xfgИ еще бы поделиться как правильно коммитить внутри фича-ветки и как потом сквошить эти коммиты перед мержем в мастер. Пока делаешь таск много файлов меняется и забываешь делать коммиты. Потом пишешь git status а там изменений на 2 экрана и уже фиг разберешься, сколько было подзадач в этом таске, что было перед чем и как теперь это всё разбить на логические коммиты. Сидишь в интерактивном режиме, пытаешься всё это как-то поделить, в итоге ничего не получается и результат: git commit -m 'some changes there'
Дмитрий ЕлисеевПоставьте SourceTree или SmartGit и переключайтесь кликами мыши. И аналогично выбирайте только нужные файлы или фрагменты для индексации.
АлексейКогда ожидается заключительная часть?
Дмитрий ЕлисеевЗавтра последний урок по Laravel, так что скоро освобожусь.
Павел Мозг – video-kursov.netБлагодарю за такой отличный курс! Очень ждем заключительную часть, надеюсь Вы освободились и можете её записать :-)
Mad AlexДмитрий, ей Бо, истомил уже ожиданиями 7-ой части PSR. Будь добр, намекни хотя бы какая тема там будет.
ИМХО, клево было бы разобрать тему ORM DataMapper. Хотя понятно что это не имеет отношения к PSR, с одной стороны. С другой стороны сама по себе тема не простая. Но было бы очень сильно.
Mad AlexХа! Перепрочел свой пост - выглядит как наезд )))). Ни в коем разе! Огромная благодарность за проделанную работу!