PSR-7 фреймворк: Шаблонизаторы и вёрстка

Пятый урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Пишем свой шаблонизатор с наследованием шаблонов через систему блоков и изучаем работу существующих:

Исходный код на GitHub

Для более комфортного просмотра откройте скринкаст на 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 - Подведение итогов

  1. Структура и работа с HTTP
  2. Контроллеры и маршрутизация
  3. Middleware и Pipeline
  4. Контейнер внедрения зависимостей
  5. Шаблонизаторы и вёрстка
  6. Обновление до PSR-15, вывод ошибок и логирование
  7. Консольные команды, базы данных и ресурсы

Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!

Комментарии

 

Mad Alex

А свою ORM будем писать? Если нет, то очень жаль. Крутая тема для общего понимания была бы.

Ответить

 

Русинов Артем

Плюсую. Мне бы тоже было очень интересна эта тема

Ответить

 

Евгений

Спасибо за работу! Когда будет курс по 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, так что скоро освобожусь.

Ответить

 

Павел Мозг

Благодарю за такой отличный курс! Очень ждем заключительную часть, надеюсь Вы освободились и можете её записать :-)

Ответить

 

Mad Alex

Дмитрий, ей Бо, истомил уже ожиданиями 7-ой части PSR. Будь добр, намекни хотя бы какая тема там будет.
ИМХО, клево было бы разобрать тему ORM DataMapper. Хотя понятно что это не имеет отношения к PSR, с одной стороны. С другой стороны сама по себе тема не простая. Но было бы очень сильно.

Ответить

 

Mad Alex

Ха! Перепрочел свой пост - выглядит как наезд )))). Ни в коем разе! Огромная благодарность за проделанную работу!

Ответить

Оставить комментарий

Войти | Завести аккаунт | Войти через

(никто не увидит)



Можно использовать теги <p> <ul> <li> <b> <i> <a> <pre>