В общем:
process()
оставить, добавить MiddlewareInterface
Выбрасывает исключение, если стек пуст
dispatch()
переименовать на handle()
, вернув интерфейс RequestHandlerInterface
выбрасывает исключение, если нет $nextHandler
addMiddleware()
переименовать в add()
из конструктора убрать массив мидлварей, он только путает
зачем нужен MiddlewareInterface? чтобы помещать один трубопровод в другой, достраивать трубопровод из отрезков
Откуда они берутся?
У меня такой юзкейс: есть два приложения, отличающиеся доменом на 3-м уровне. Для каждого из них отличается низ стека пайплайна, а начало общее. Поэтому в зависимости от домена берётся нужный пайплайн и к нему достраивается пайплайн общий
зачем нужен RequestHandlerInterface? Да потому что по факту диспетчер это и есть RequestHandlerInterface - ты туда даёшь запрос, получаешь ответ