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, вывод ошибок и логирование
- Консольные команды, базы данных и ресурсы
Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!
Alexpts – alexpts.ruПодскажи есть ли реализации для конвертирования Yii1 request/response в PSR-7?
Может быть есть группа людей, которым это тоже актуально будет, чтобы с ними скооперироваться и написать такой конвертор.
Дмитрий ЕлисеевДля Yii1 вряд ли кто-то этим занимается.
ЮрийСпасибо дмитрий
не успеваю смотреть..
а еще нужно понять что к чему ))
Дмитрий ЕлисеевВ почте попросили реквизиты для donates. Сделал отдельную страницу.
Алмат ЖандаулетовДмитрий.
Может сделаете курс по Continuos Integration?
В частности интересует, как вы разворачиваете проекты в продакшен. Как запускаете автотесты? ЧерезTravisCI or Gitlab, Bamboo or Jenkins? Как вы откатываете изменения, если что то пошло не так? Сколько у вас окружении при разработке Deveopment, Staging, Production? Как они все взаимодействую? Какие друг от друга зависимости?
И т.д.
Сделайте пож-та курс. Даже платный. Тема очень интересная
ЯромирПоддерживаю. Тема про CI была бы очень кстати.
АндрейПрисоединяюсь... Если бы Вы сделали такой курс за разумную цену, было бы очень круто...
Александр КуликПоддерживаю! Очень нужная тема
ivanopolПрисоединяюсь!
seoonly.ru – seoonly.ruогонь))) с наступающим!
Александр КуликДорбрый день. Когда ожидать продолжения?
ЮлияЗдравствуйте, Дмитрий.
У меня вопрос касательно урока.
Стандарт PSR-15 уже приняли и в связи с этим выпустили новую версию zend-stratigility. Класс MiddlewarePipe сделали final, поэтому мы не можем от него отнаследовать класс Application.
Как вы посоветуете в таком случае реализовать класс Application? Или обойтись без него,используя непосредственно класс MiddlewarePipe? Как в таком случае работать с нашими Middleware? Метод pipe принимает только Psr\Http\Server\MiddlewareInterface, значит нужно переписать существующие классы, что бы они имплементировали этот интерфейс?
smocЮлия, выходи за меня!
Дмитрий ЕлисеевДа, 15 марта обновили. Наследование можно поменять на композицию:
class Application implements MiddlewareInterface { public function __construct(...) { $this->pipe = new MiddlewarePipe(...); } }и вместо parent::pipe() вызывать $this->pipe->pipe().
АлександрКак я понимаю этим не ограничиваются изменения. Нужно же ещё изменить резолвер, чтобы он возвращал MiddlewareInterface который принимает MiddlewarePipe::pipe, ну и что-то сделать с самими посредниками, либо реализовать в них MiddlewareInterface либо написать какие то адаптеры/декораторы для них.
Что в данном случае выглядит предпочтительнее?
Дмитрий ЕлисеевДа, переделаем на следующем уроке под PSR-15
GEKKOА когда ждать следующего урока? (ориентировочно)
GEKKOЗдравствуйте, Дмитрий.
Так же хотелось бы увидеть ответ на вопрос Юлии, по поводу stratigility и PSR-15
Спасибо.
Павел Мозг – video-kursov.netСмотрю с удовольствием, понимание есть, но когда начинаю сам кодить то, о чем говорится в уроке... жутко туплю)) После такого другие курсы кажутся наипростейшими. Побольше б таких. Большое спасибо вам, Дмитрий!