Только тут важно учесть, что если мы хотим таким образом логировать request через миддлвейр, то необходимо его всегда ставить на первое место в списке посредников. Хоть Request у нас имутабельный, объекты, на которые ссылается объект Request ( в перспективе ) может изменится. Понимаю, что видео не об этом, но это может ввести в замешательство новичков. P.S. Валентин об этом сказал далее ;D
Конечно вроде красиво, но: Во-первых такой реализацией-рекурсией нельзя обрабатывать данные и пересылать дальше. Поэтому в симфони реализация гораздо лучше. Во-вторых array_shift это конечно по пхпшному, но не стоит удалять мидлвар из памяти(свойства). Будь это демон/асинк, то следующий запрос уже не сможет обработаться этой реализацией, там будет null вместо ваших мидлвар. Лучше реализовать пайплайн через обычный цикл.
Не совсем понял в каком месте будет выполнятся сама бизнес логика. Валидация же должна идти в самом начале и если мне нужно в логгер записать какую то другую инфу в процессе выполнения бизнес логики тоже не понятно
Можно, но здесь array_shift возвращает первый элемент и удаляет его, изменяя массив. С current придётся либо дополнительно удалять первый элемент вручную либо ещё хуже.
Спасибо. Метод 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); }
Как же не хватает таких видео. Где и реализация на около архитектурном стиле и где PSR интерфейсы используются.
Да, с полугодишным опытом разработки не всё понятно, но зато есть куда расти. Автору спасибо.
Очень классно, СПАСИБО автору!
Крутой урок! Спасибо.
Спасибо, было очень любопытно!
Для новичка очень познавательно! спасибо!
Только тут важно учесть, что если мы хотим таким образом логировать request через миддлвейр, то необходимо его всегда ставить на первое место в списке посредников. Хоть Request у нас имутабельный, объекты, на которые ссылается объект Request ( в перспективе ) может изменится. Понимаю, что видео не об этом, но это может ввести в замешательство новичков.
P.S. Валентин об этом сказал далее ;D
Всё верно, спасибо. Благодаря вашему комментарию проверил, как я залил в репозиторий. Оказалось, что после записи видео осталось наоборот, поправил.
Сколько же времени потрачено, осмысленно и написано кода (этюдов и боевых строк), чтобы вот так запросто набросать такой пример 👍
Было бы круто по остальных psr мастер класы psr7, psr17 и тд, сейчас нет нормально скринкаста 🥹
Конечно вроде красиво, но:
Во-первых такой реализацией-рекурсией нельзя обрабатывать данные и пересылать дальше. Поэтому в симфони реализация гораздо лучше.
Во-вторых array_shift это конечно по пхпшному, но не стоит удалять мидлвар из памяти(свойства). Будь это демон/асинк, то следующий запрос уже не сможет обработаться этой реализацией, там будет null вместо ваших мидлвар.
Лучше реализовать пайплайн через обычный цикл.
Middleware семантически это "прослойка", нежели связующее звено
implements Handler в нескольких местах сильно увеличит возможности композиции)
Паттерн Mediator (из GoF) и Middleware это одно и тоже? Mediator === Middleware ?
Как будто мидлвэйр это синоним цепочки обязанностей (chain of responsibility)
Не совсем понял в каком месте будет выполнятся сама бизнес логика. Валидация же должна идти в самом начале и если мне нужно в логгер записать какую то другую инфу в процессе выполнения бизнес логики тоже не понятно
а зачем array shift можно ведь current?
Можно, но здесь array_shift возвращает первый элемент и удаляет его, изменяя массив. С current придётся либо дополнительно удалять первый элемент вручную либо ещё хуже.
да, логично, спасибо)@@user-davidtema
usleep(100) - это 0.1 миллисекунд, а не 100)
Да, спасибо! u - это ведь микро, а не милли.
Мне понравилось 👍 Спасибо ❤ Буду ждать курс
Супер! Спасибо, ждем курс )
Спасибо. Метод 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);
}
где курс Ваш именно этот найти?
Супер огромное спасибо!)
привет, спс за видос )
А где курс можно посмотреть?
Спасибо за крутой урок!
А курс-то когда будет?
Очень хорошее видео! Спасибо!
Отличная работа!