@@ -81,7 +81,7 @@ public function __construct(
8181 $ this ->middlewares = new \SplQueue ();
8282
8383 foreach ($ middlewares as $ i => $ middleware ) {
84- $ this ->isMiddlewareInstance ($ middleware , $ i );
84+ $ this ->validateMiddleware ($ middleware , $ i );
8585 $ this ->middlewares ->enqueue ($ middleware );
8686 }
8787 }
@@ -304,6 +304,8 @@ public function pipe(iterable|MiddlewareInterface $middlewares, bool $prepend =
304304 $ middlewares = [$ middlewares ];
305305 }
306306
307+ // Collect and validate all middleware first
308+ $ middlewareArray = [];
307309 foreach ($ middlewares as $ i => $ middleware ) {
308310 $ this ->isMiddlewareInstance ($ middleware , $ i );
309311
@@ -315,8 +317,19 @@ public function pipe(iterable|MiddlewareInterface $middlewares, bool $prepend =
315317 throw new \RuntimeException ('Cannot add pipeline that contains reference to this pipeline ' );
316318 }
317319
318- $ prepend ? $ copy ->middlewares ->unshift ($ middleware ) :
320+ $ middlewareArray [] = $ middleware ;
321+ }
322+
323+ // Add middleware in correct order
324+ if ($ prepend ) {
325+ // Reverse array so unshift maintains the original order
326+ foreach (array_reverse ($ middlewareArray ) as $ middleware ) {
327+ $ copy ->middlewares ->unshift ($ middleware );
328+ }
329+ } else {
330+ foreach ($ middlewareArray as $ middleware ) {
319331 $ copy ->middlewares ->enqueue ($ middleware );
332+ }
320333 }
321334
322335 return $ copy ;
0 commit comments