Ja zawsze uzywalem i rozumiem middleware jako klasa ktora jesty wywolana przed albo po kontrolerze.
Uscislajac - klasy w liczbie mnogiej, wywolywane w okreslonym przez developera porzadku. Jesli chodzi o moment wywolania to raczej wylacznie przed kontrolerem, dlatego ze wszystko co wypluwa z siebie kontroler to response, a jesli juz cos musisz robic dodatkowo z respons'em ogarnia to dodatkowa, warstwa czyli responder.
I przyjmuje klase request jako DI.
Nic z tych rzeczy, w sensie formalnym middleware jest takim samym serwisem jak kazdy inny, pomijajac fakt iz wstrzykiwanie DI kontenera jest wery bad a przejmowanie jego funkcji przez request to w ogole juz jakis kosmos, same middleware a takze wszystkie niezbedne mu zaleznosci ogarnia DI. Request w tym przypadku w praktyce formalnie sluzy juz nie tylko abstrakcja dla transferu danych miedzy klientem a aplikacja, ale rowniez miedzy middleware reszta aplikacji (kontrolerem, serwisami)
Widzialem ten link z psr. Kumpel jednak upiera sie, ze to nie dokonca tak jest. Niby twierdzi, ze zna DDD. I tam niby middleware jest pomiedzy roznymi warstwami.
W takim przypadku jedna dowolna warstwa znajdujaca sie miedzy dwiema innymi zawsze bedzie w jakims sensie middleware, musicie porozumiec sie co do wspolnej plaszczyzny definicji.
Dla mnie to dalej nie ma sensu. Tak jak jest opisane w PSR tak uzywa slim, laravel, zend etc. Nie wiem jak Symfony.
Jesli chodzi o Symfony, to zanim pojawil sie PSR15, Fabien Potencier, formalnie podobny mechanizm zrealizowal za pomoca event'ow, ale niestety wylacznie w odniesieniu do samego frameworka. Custom'owa organizacja Twojego wlasnego kodu ktora moglaby polegac na samodzielne podpiecie pod inicjowany frameworkiem event chain jest oglednie mowiac "nie ulatwiona", a to z tego powodu, ze de facto ego tworcy symfony nigdy nie pozwalalo mu przyznac, ze cos wartosciowego moze rowniez powstac poza SensioLabs. Zreszta podobna sytuacja ma miejsce w przypdaku pozostalych PSR'ow.