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, вывод ошибок и логирование
- Консольные команды, базы данных и ресурсы
Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!
А свою ORM будем писать? Если нет, то очень жаль. Крутая тема для общего понимания была бы.
Плюсую. Мне бы тоже было очень интересна эта тема
Спасибо за работу! Когда будет курс по Symfony? :)
Около августа
Пробую запустить вашу демо-shop-магазин
как только в UserControllere
устанавливаю
так сразу же слетает все. Перестает работать. Хотя все установил. Никак не могу понять, почему это происходит.
Вот что пишет:
Can not instantiate shop\dispatchers\EventDispatcher
Не срабатывает конфигурация контейнера.
Добрый вечер.
А когда будет шестая часть?
Дмитрий можете поделиться, как вы в видео перескакиваете на коммиты на следующие?
Когда вводишь git log, то видишь только текущий и предыдущие коммиты. Как найти быстро хеш следующего коммита?
Допустим есть ветка мастер. Ты переключаешься на самый первый коммит. и все - в git log только он и остается. А как потом на второй, третий переключиться?
И еще бы поделиться как правильно коммитить внутри фича-ветки и как потом сквошить эти коммиты перед мержем в мастер. Пока делаешь таск много файлов меняется и забываешь делать коммиты. Потом пишешь git status а там изменений на 2 экрана и уже фиг разберешься, сколько было подзадач в этом таске, что было перед чем и как теперь это всё разбить на логические коммиты. Сидишь в интерактивном режиме, пытаешься всё это как-то поделить, в итоге ничего не получается и результат: git commit -m 'some changes there'
Поставьте SourceTree или SmartGit и переключайтесь кликами мыши. И аналогично выбирайте только нужные файлы или фрагменты для индексации.
Когда ожидается заключительная часть?
Завтра последний урок по Laravel, так что скоро освобожусь.
Благодарю за такой отличный курс! Очень ждем заключительную часть, надеюсь Вы освободились и можете её записать :-)
Дмитрий, ей Бо, истомил уже ожиданиями 7-ой части PSR. Будь добр, намекни хотя бы какая тема там будет.
ИМХО, клево было бы разобрать тему ORM DataMapper. Хотя понятно что это не имеет отношения к PSR, с одной стороны. С другой стороны сама по себе тема не простая. Но было бы очень сильно.
Ха! Перепрочел свой пост - выглядит как наезд )))). Ни в коем разе! Огромная благодарность за проделанную работу!