PSR-7 фреймворк: Middleware и Pipeline
Третий урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Сегодня рассмотрим крайне полезную тему реализации промежуточного слоя посредников Middleware поверх контроллеров и написания трубопровода Pipeline для их вызова:
Для более комфортного просмотра откройте скринкаст на YouTube, разверните видео до оригинального размера значком и поставьте скорость 1,75:
Содержание:
- 00:00:00 - Вступление, доработка кода
- 00:13:42 - IndexActionTest
- 00:15:05 - ShowActionTest
- 00:17:38 - Ответ на вопрос: нужно ли всё тестировать?
- 00:22:15 - Вынос сериализации сущности
- 00:25:41 - Теория построения цепочек обработки запроса
- 00:26:02 - AboutAction
- 00:27:46 - CabinetAction
- 00:32:41 - Хэш пароля, базовая аутентификация, токен, теория
- 00:35:15 - Вынесение паролей в конфигурацию
- 00:37:12 - Вынесение повторяющегося кода
- 00:38:32 - BasicAuthDecorator
- 00:45:37 - Замена декораторов повторно используемой обёрткой
- 00:51:48 - BasicAuthMiddleware
- 00:57:01 - ProfilerMiddleware
- 00:59:27 - Папка Pipeline
- 01:01:22 - Перенос экшена в Pipeline
- 01:06:05 - PipelineTest
- 01:07:20 - Класс Pipeline
- 01:14:15 - SplQueue
- 01:17:40 - Вынесение класса Next
- 01:22:12 - Повторение выводов, clone
- 01:24:35 - NotFoundHandler
- 01:26:17 - Интеграция Pipeline в проект
- 01:29:10 - MiddlewareResolver
- 01:30:39 - Рефакторинг, добавление глобальных посредников
- 01:33:54 - Ленивое создание объектов
- 01:38:34 - Сравнение Action, Middleware и Pipeline
- 01:41:25 - Обобщение работы
- 01:43:48 - Делаем любые цепочки, пример API
- 01:49:05 - Как применять в нашем случае, теория
- 01:51:10 - Реализация
- 01:53:02 - Упрощение кода
- 01:57:15 - Нагромождение логики
- 02:01:18 - Класс Application
- 02:05:05 - Упрощение Application
- 02:07:30 - CredentialMiddleware
- 02:09:51 - Красивый вывод ошибок
- 02:15:53 - ErrorHandlerMiddleware
- 02:17:03 - Промежуточные выводы по теории
- 02:18:47 - RouteMiddleware
- 02:25:04 - Вынос DispatchMiddleware
- 02:31:17 - Доработка MiddlewareResolver
- 02:31:59 - Готовые посредники на примере BasicAuthMiddleware
- 02:37:21 - Ответ на вопрос про иммутабельность
- 02:39:28 - Поддержка PSR-15, http-middleware
- 02:48:32 - Поддержка разных типов Middleware
- 02:50:32 - MiddlewareResolverTest
- 02:57:05 - Приём в MiddlewareResolver трёх аргументов
- 02:59:15 - InteropHandlerWrapper
- 03:01:38 - UnknownMiddlewareTypeException
- 03:08:37 - Промежуточные выводы урока
- 03:14:50 - Готовая библиотека zend-stratigility
- 03:22:57 - Модификация кода для поддержки библиотеки
- 03:44:27 - Подведение итогов, популярные библиотеки
Остальные части:
- Структура и работа с HTTP
- Контроллеры и маршрутизация
- Middleware и Pipeline
- Контейнер внедрения зависимостей
- Шаблонизаторы и вёрстка
- Обновление до PSR-15, вывод ошибок и логирование
- Консольные команды, базы данных и ресурсы
Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!
Подскажи есть ли реализации для конвертирования Yii1 request/response в PSR-7?
Может быть есть группа людей, которым это тоже актуально будет, чтобы с ними скооперироваться и написать такой конвертор.
Для Yii1 вряд ли кто-то этим занимается.
Спасибо дмитрий
не успеваю смотреть..
а еще нужно понять что к чему ))
В почте попросили реквизиты для donates. Сделал отдельную страницу.
Дмитрий.
Может сделаете курс по Continuos Integration?
В частности интересует, как вы разворачиваете проекты в продакшен. Как запускаете автотесты? ЧерезTravisCI or Gitlab, Bamboo or Jenkins? Как вы откатываете изменения, если что то пошло не так? Сколько у вас окружении при разработке Deveopment, Staging, Production? Как они все взаимодействую? Какие друг от друга зависимости?
И т.д.
Сделайте пож-та курс. Даже платный. Тема очень интересная
Поддерживаю. Тема про CI была бы очень кстати.
Присоединяюсь... Если бы Вы сделали такой курс за разумную цену, было бы очень круто...
Поддерживаю! Очень нужная тема
Присоединяюсь!
огонь))) с наступающим!
Дорбрый день. Когда ожидать продолжения?
Здравствуйте, Дмитрий.
У меня вопрос касательно урока.
Стандарт PSR-15 уже приняли и в связи с этим выпустили новую версию zend-stratigility. Класс MiddlewarePipe сделали final, поэтому мы не можем от него отнаследовать класс Application.
Как вы посоветуете в таком случае реализовать класс Application? Или обойтись без него,используя непосредственно класс MiddlewarePipe? Как в таком случае работать с нашими Middleware? Метод pipe принимает только Psr\Http\Server\MiddlewareInterface, значит нужно переписать существующие классы, что бы они имплементировали этот интерфейс?
Юлия, выходи за меня!
Да, 15 марта обновили. Наследование можно поменять на композицию:
и вместо parent::pipe() вызывать $this->pipe->pipe().
Как я понимаю этим не ограничиваются изменения. Нужно же ещё изменить резолвер, чтобы он возвращал MiddlewareInterface который принимает MiddlewarePipe::pipe, ну и что-то сделать с самими посредниками, либо реализовать в них MiddlewareInterface либо написать какие то адаптеры/декораторы для них.
Что в данном случае выглядит предпочтительнее?
Да, переделаем на следующем уроке под PSR-15
А когда ждать следующего урока? (ориентировочно)
Здравствуйте, Дмитрий.
Так же хотелось бы увидеть ответ на вопрос Юлии, по поводу stratigility и PSR-15
Спасибо.
Смотрю с удовольствием, понимание есть, но когда начинаю сам кодить то, о чем говорится в уроке... жутко туплю)) После такого другие курсы кажутся наипростейшими. Побольше б таких. Большое спасибо вам, Дмитрий!