diff --git a/src/Illuminate/Foundation/Http/Kernel.php b/src/Illuminate/Foundation/Http/Kernel.php index 83a5ae42780c..45967bedbd98 100644 --- a/src/Illuminate/Foundation/Http/Kernel.php +++ b/src/Illuminate/Foundation/Http/Kernel.php @@ -252,12 +252,12 @@ protected function terminateMiddleware($request, $response) continue; } - [$name] = $this->parseMiddleware($middleware); + [$name, $parameters] = $this->parseMiddleware($middleware); $instance = $this->app->make($name); if (method_exists($instance, 'terminate')) { - $instance->terminate($request, $response); + $instance->terminate($request, $response, ...$parameters); } } } diff --git a/tests/Foundation/Http/KernelTest.php b/tests/Foundation/Http/KernelTest.php index 8df127e89298..00ff360cc89a 100644 --- a/tests/Foundation/Http/KernelTest.php +++ b/tests/Foundation/Http/KernelTest.php @@ -145,6 +145,46 @@ public function terminate($request, $response) ], $called); } + public function testItTriggersTerminatingEventWithParameters() + { + $called = []; + $app = $this->getApplication(); + $events = new Dispatcher($app); + $app->instance('events', $events); + $kernel = new Kernel($app, $this->getRouter()); + $app->instance('terminating-middleware', new class($called) + { + public function __construct(private &$called) + { + // + } + + public function terminate($request, $response, ...$parameters) + { + $this->called[] = $parameters; + $this->called[] = 'terminating middleware with parameters'; + } + }); + $kernel->setGlobalMiddleware([ + 'terminating-middleware:foo,bar', + ]); + $events->listen(function (Terminating $terminating) use (&$called) { + $called[] = 'terminating event'; + }); + $app->terminating(function () use (&$called) { + $called[] = 'terminating callback'; + }); + + $kernel->terminate(new Request(), new Response()); + + $this->assertSame([ + 'terminating event', + ['foo', 'bar'], + 'terminating middleware with parameters', + 'terminating callback', + ], $called); + } + /** * @return \Illuminate\Contracts\Foundation\Application */