Готовим Middleware в PHP
Вставка
- Опубліковано 28 вер 2024
- В этом мастер-классе Валентин Удальцов расскажет о middleware как об архитектурном шаблоне и ООП-паттерне в контексте PHP. Вы узнаете, как выглядит контракт middleware, как построить пайплайн для запуска цепочки обработчиков, какие преимущества имеет middleware перед другими похожими паттернами. Лайв-кодинг на PHP 8.1 с применением статического анализа. Мастер-класс ориентирован на PHP-разработчиков уровня middle и выше, в частности, для понимания материала необходимо знать, что такое контракт, композиция, декоратор, callable.
Пых t.me/phpyh/
Репозиторий с кодом из мастер-класса: github.com/vud...
Да, с полугодишным опытом разработки не всё понятно, но зато есть куда расти. Автору спасибо.
Крутой урок! Спасибо.
Как же не хватает таких видео. Где и реализация на около архитектурном стиле и где PSR интерфейсы используются.
Спасибо, было очень любопытно!
Для новичка очень познавательно! спасибо!
Только тут важно учесть, что если мы хотим таким образом логировать request через миддлвейр, то необходимо его всегда ставить на первое место в списке посредников. Хоть Request у нас имутабельный, объекты, на которые ссылается объект Request ( в перспективе ) может изменится. Понимаю, что видео не об этом, но это может ввести в замешательство новичков.
P.S. Валентин об этом сказал далее ;D
Всё верно, спасибо. Благодаря вашему комментарию проверил, как я залил в репозиторий. Оказалось, что после записи видео осталось наоборот, поправил.
Конечно вроде красиво, но:
Во-первых такой реализацией-рекурсией нельзя обрабатывать данные и пересылать дальше. Поэтому в симфони реализация гораздо лучше.
Во-вторых array_shift это конечно по пхпшному, но не стоит удалять мидлвар из памяти(свойства). Будь это демон/асинк, то следующий запрос уже не сможет обработаться этой реализацией, там будет null вместо ваших мидлвар.
Лучше реализовать пайплайн через обычный цикл.
Middleware семантически это "прослойка", нежели связующее звено
Паттерн Mediator (из GoF) и Middleware это одно и тоже? Mediator === Middleware ?
Как будто мидлвэйр это синоним цепочки обязанностей (chain of responsibility)
Не совсем понял в каком месте будет выполнятся сама бизнес логика. Валидация же должна идти в самом начале и если мне нужно в логгер записать какую то другую инфу в процессе выполнения бизнес логики тоже не понятно
usleep(100) - это 0.1 миллисекунд, а не 100)
Да, спасибо! u - это ведь микро, а не милли.
Сколько же времени потрачено, осмысленно и написано кода (этюдов и боевых строк), чтобы вот так запросто набросать такой пример 👍
Мне понравилось 👍 Спасибо ❤ Буду ждать курс
Было бы круто по остальных psr мастер класы psr7, psr17 и тд, сейчас нет нормально скринкаста 🥹
Супер! Спасибо, ждем курс )
implements Handler в нескольких местах сильно увеличит возможности композиции)
Спасибо. Метод handle в классе Pipeline можно еще сделать так:
private int $index = 0;
public function handle(Request $request): Response
{
if (!isset($this->middlewares[$this->index])) {
return $this->handler->handle($request(;
}
$this->index++;
return $this->middlewares[$this->index - 1]->process($request, $this);
}
где курс Ваш именно этот найти?
Очень классно, СПАСИБО автору!
Супер огромное спасибо!)
привет, спс за видос )
А где курс можно посмотреть?
Спасибо за крутой урок!
А курс-то когда будет?
Очень хорошее видео! Спасибо!
Отличная работа!
а зачем array shift можно ведь current?
Можно, но здесь array_shift возвращает первый элемент и удаляет его, изменяя массив. С current придётся либо дополнительно удалять первый элемент вручную либо ещё хуже.
да, логично, спасибо)@@user-davidtema