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