From d2f733fac709e65d549157b3dd068a1f8bbead38 Mon Sep 17 00:00:00 2001 From: Paul Ghiuzan Date: Mon, 11 Dec 2023 23:12:30 +0200 Subject: [PATCH] Make ConvertEmptyStringsToNullTest middleware terminable --- .../Middleware/ConvertEmptyStringsToNull.php | 10 ++++++++++ .../ConvertEmptyStringsToNullTest.php | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php b/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php index 3fb0ee22c19d..003712238c61 100644 --- a/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php +++ b/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php @@ -43,6 +43,16 @@ protected function transform($key, $value) return $value === '' ? null : $value; } + /** + * Clean up callbacks list when the app terminates. + * + * @return void + */ + public function terminate() + { + static::$skipCallbacks = []; + } + /** * Register a callback that instructs the middleware to be skipped. * diff --git a/tests/Foundation/Http/Middleware/ConvertEmptyStringsToNullTest.php b/tests/Foundation/Http/Middleware/ConvertEmptyStringsToNullTest.php index a844d23376a6..f0630a0171fb 100644 --- a/tests/Foundation/Http/Middleware/ConvertEmptyStringsToNullTest.php +++ b/tests/Foundation/Http/Middleware/ConvertEmptyStringsToNullTest.php @@ -41,4 +41,24 @@ public function testSkipConvertsEmptyStringsToNull() $this->assertSame('', $request->get('baz')); }); } + + public function testItClearsOutSkipCallbacksWhenTerminated(): void + { + $middleware = new ConvertEmptyStringsToNull(); + + ConvertEmptyStringsToNull::skipWhen(fn (Request $request) => true); + + $middleware->terminate(); + + $symfonyRequest = new SymfonyRequest([ + 'foo' => '', + ]); + + $symfonyRequest->server->set('REQUEST_METHOD', 'GET'); + $request = Request::createFromBase($symfonyRequest); + + $middleware->handle($request, function (Request $request) { + $this->assertSame(null, $request->get('foo')); + }); + } }