Ну да, первая часть картинки.
Ладно, почему ты выбрал именно такую реализацию? С чего вдруг такие правила что обязательно нужно выполнить код последнего и что мидлвар не запустится, пока не отработает следующий в цепочке.
Мидлвары это просто стек функций вместо одной, которые в порядке очереди обрабатывают твою команду. Им даже не обязательно возвращать ответ, всё зависит от задачи.
$middwareList[] = function(){};
$middwareList[] = function(){};
$middwareList[] = function(){};
$middwareList[] = function(){};
$middwareList[] = function(){};
foreach ($middwareList as $item) {
$item();
}
Или могут переваривать ответ друг друга.
$middwareList[] = function($data){return ++$data;};
$middwareList[] = function(){};
$middwareList[] = function(){};
$middwareList[] = function(){};
$middwareList[] = function(){};
$data = 1;
foreach ($middwareList as $item) {
if ($result = $item($data)) {
$data = $result;
}
}
echo $data;
Или добавить ещё 100500 настроек и сложностей
$middwareList[] = [
'break' => false,
'function' => function($data){
return $data;
}
];
$middwareList[] = [
'break' => true,
'function' => function($data){
return 1;
}
];
$middwareList[] = [
'function' => function($data){
return 2;
}
];
$data = 0;
foreach ($middwareList as $item) {
if ($result = $item['function']($data)) {
$data = $result;
if (!empty($item['break'])) {
break;
}
}
}
echo $data;
Сама идея при этом простая как foreach. Возможность заменить любой элемент, не переписывая код. Возможность навесить ещё логики на событие не переписывая код. Возможность сделать checkbox в админке что бы включать/выключать логику. Возможность сделать drag and drop в админке, что бы менять мидлвары местами.
А у тебя получается во первых частный случай реализации,а не "вот это мидлвары, а это обычное приложение",
во вторых какой то костыльный (сначала последний, потом второй, потом пи делённое на третий),
в третьих какой то монолитный, потому что они должны знать кто перед ним, кто после, что бы первый не делал BEFORE,
в четвёртых какой то не оптимальный, потому что первый выполнил задачу и нужно остановить стек, что бы ещё 100500 мидлваров не работали над решением того, что уже решено, а у тебя получается "Мидлвары наоборот, получают результат после запуска следующего", то есть первый не выполнит задачу, пока не сработает второй, второй не выполнит пока не сработает 100500й, в итоге они год решали задачу, никто не смог, последний тоже сдался, теперь первый может спокойно отработать.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2