PSR-7 фреймворк: PSR-15, вывод ошибок и логирование
Шестой урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Обновляем фреймворк под принятый PSR-15, дорабатываем вывод ошибок в продакшене и в режиме отладки, изучаем композицию вместо наследования и внедряем логирование:
Для более комфортного просмотра откройте скринкаст на YouTube, разверните видео до оригинального размера значком и поставьте скорость 1,75:
Содержание:
- 00:00:00 - Вступление, цели урока
- 00:05:51 - Обновление до PSR-15, теория
- 00:08:51 - Причины наследования от MiddlewarePipe
- 00:16:13 - Композиция и агрегация вместо наследования
- 00:26:13 - Переименовывания в MiddlewareResolverTest
- 00:30:31 - Изменение MiddlewareResolver
- 00:35:09 - Обновление компонентов
- 00:38:31 - Доработка Application
- 00:45:25 - Новый NotFoundHandler
- 00:46:43 - ApplicationTest
- 00:47:09 - RouteMiddleware
- 00:48:31 - С трёх аргументов на два
- 00:49:35 - Переработка MiddlewareResolver
- 00:50:21 - RequestHandlerMiddleware
- 00:51:50 - CallableMiddlewareDecorator
- 00:56:29 - DoublePassMiddlewareDecorator
- 00:59:16 - SinglePassMiddlewareDecorator
- 01:02:24 - Промежуточные итоги
- 01:03:40 - LazyMiddlewareDecorator
- 01:06:07 - MiddlewareResolverTest
- 01:07:38 - Промежуточные итоги
- 01:10:40 - ErrorHandlerMiddleware
- 01:17:27 - Смешивание ответственностей в ErrorHandler
- 01:19:31 - Гибкость кода, архитектура, теория
- 01:43:03 - Рефакторинг ErrorHandlerMiddleware
- 01:47:51 - ErrorResponseGenerator
- 01:51:39 - Выделение интерфейса ErrorResponseGenerator
- 01:52:32 - JsonErrorResponseGenerator
- 01:53:15 - Утилиты Utils
- 01:56:01 - Перенос универсальных классов во фреймворк
- 01:58:49 - Применени принципа DIP из SOLID
- 02:06:25 - Рефакторинг PrettyErrorResponseGenerator
- 02:18:43 - Промежуточные итоги
- 02:20:33 - Автовыбор формата вывода ошибки
- 02:24:55 - Отвязка от zend-diactoros
- 02:32:06 - Разнесение генераторов, теория
- 02:34:47 - DebugErrorResponseGenerator
- 02:39:09 - Проверка работы
- 02:40:58 - Панель Whoops
- 02:45:06 - Создание WhoopsErrorResponseGenerator
- 02:49:28 - Проверка работы
- 02:51:42 - Перенос в папку фреймворка
- 02:55:16 - Логирование ошибок
- 02:58:22 - Класс Logger
- 03:00:47 - Интерфейс Logger, реализации FileLogger и DbLogger
- 03:02:27 - PSR-3: Logger Interface
- 03:04:09 - Библиотека Monolog
- 03:08:06 - ErrorHandlerTest
- 03:10:58 - Подключение monolog
- 03:17:33 - Отлов ошибок 404, ResponsLoggerMiddleware
- 03:24:18 - Разделение ответственностей, теория
- 03:28:58 - Рефакторинг
- 03:32:12 - LogErrorListener
- 03:34:35 - Промежуточные итоги
- 03:36:50 - Разделение конфигурации для продакшена и разработки
- 03:45:13 - Вынесение анонимных функций в классы-фабрики
- 03:49:18 - Кэширование, ConfigAggregator
- 03:57:00 - Промежуточные итоги
- 04:00:26 - Обзор получившегося фреймворка
- 04:02:53 - Обзор Zend Expressive
- 04:40:46 - Подведение итогов
- Структура и работа с HTTP
- Контроллеры и маршрутизация
- Middleware и Pipeline
- Контейнер внедрения зависимостей
- Шаблонизаторы и вёрстка
- Обновление до PSR-15, вывод ошибок и логирование
- Консольные команды, базы данных и ресурсы
Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!
Авторам курсов: Если пользуетесь услугами сервиса «Инфоконтроль» для блокировки складчин, то проверьте свои свежие списки блокировок на lumendatabase.org в выдаче Google. После неудачных обновлений в сервисе смешались чёрные и белые списки и под жалобы в Google попали сотни безобидных адресов и наш паблик в VK. Иначе на вас будут ругаться как на меня здесь. Сейчас сотрудники сервиса немного нервничают, но лишние жалобы отменяют.
Программистам сервисов: Пишите тесты, чтобы я, как пользователь ваших сервисов, не поседел раньше времени от таких новостей.
Дмитрий спасибо за Ваш труд, когда планируете выпустить следующий урок?
Присоединяюсь к предыдущему комментатору в плане благодарности - идеальная подача материала в купе с глубоким осмыслением, рассматриваемых вопросов. А так же присоединюсь и к вопросу о планируемом сроке выхода следующего скринкаста. От себя добавлю - будет ли рассматриваться RequestHandlerRunner в ключе того что переписали код под PSR-15, да и SapiEmitter получил статус deprecated?