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 будем писать? Если нет, то очень жаль. Крутая тема для общего понимания была бы.

Ответить

 

Русинов Артем – 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

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

Ответить

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

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


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





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