PSR-7 фреймворк: Middleware и Pipeline

Третий урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Сегодня рассмотрим крайне полезную тему реализации промежуточного слоя посредников Middleware поверх контроллеров и написания трубопровода Pipeline для их вызова:

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

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

Остальные части:

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

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

Комментарии

 

Alexpts – alexpts.ru

Подскажи есть ли реализации для конвертирования Yii1 request/response в PSR-7?
Может быть есть группа людей, которым это тоже актуально будет, чтобы с ними скооперироваться и написать такой конвертор.

Ответить

 

Дмитрий Елисеев

Для Yii1 вряд ли кто-то этим занимается.

Ответить

 

Юрий

Спасибо дмитрий
не успеваю смотреть..
а еще нужно понять что к чему ))

Ответить

 

Алмат Жандаулетов

Дмитрий.
Может сделаете курс по 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

Смотрю с удовольствием, понимание есть, но когда начинаю сам кодить то, о чем говорится в уроке... жутко туплю)) После такого другие курсы кажутся наипростейшими. Побольше б таких. Большое спасибо вам, Дмитрий!

Ответить

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

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


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





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