diff --git a/src/Illuminate/Routing/RoutingServiceProvider.php b/src/Illuminate/Routing/RoutingServiceProvider.php index 0221839fc8df..a2ca675da4e2 100755 --- a/src/Illuminate/Routing/RoutingServiceProvider.php +++ b/src/Illuminate/Routing/RoutingServiceProvider.php @@ -139,7 +139,7 @@ protected function registerPsrRequest() return with((new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory)) ->createRequest($illuminateRequest = $app->make('request')), fn ($request) => $request->withParsedBody( - array_merge($request->getParsedBody(), $illuminateRequest->getPayload()->all()) + array_merge($request->getParsedBody() ?? [], $illuminateRequest->getPayload()->all()) )); } diff --git a/tests/Integration/Foundation/RoutingServiceProviderTest.php b/tests/Integration/Foundation/RoutingServiceProviderTest.php index 859b348eb774..4753f03eda02 100644 --- a/tests/Integration/Foundation/RoutingServiceProviderTest.php +++ b/tests/Integration/Foundation/RoutingServiceProviderTest.php @@ -26,6 +26,42 @@ public function testItIncludesMergedDataInServerRequestInterfaceInstancesUsingGe ]); } + public function testItWorksNormallyWithoutMergeDataMiddlewareWithEmptyRequests() + { + Route::get('test-route', function (ServerRequestInterface $request) { + return $request->getParsedBody(); + }); + + $response = $this->withoutExceptionHandling()->get('test-route', [ + 'content-type' => 'application/json', + ]); + + $response->assertOk(); + $response->assertExactJson([]); + } + + public function testItIncludesMergedDataInServerRequestInterfaceInstancesUsingGetJsonRequestsWithContentTypeHeader() + { + Route::get('test-route', function (ServerRequestInterface $request) { + return $request->getParsedBody(); + })->middleware(MergeDataMiddleware::class); + + $response = $this->getJson('test-route?'.http_build_query([ + 'sent' => 'sent-data', + 'overridden' => 'overriden-sent-data', + ]), [ + 'content-type' => 'application/json', + ]); + + $response->assertOk(); + $response->assertExactJson([ + 'json-data' => 'json-data', + 'merged' => 'replaced-merged-data', + 'overridden' => 'overriden-merged-data', + 'request-data' => 'request-data', + ]); + } + public function testItIncludesMergedDataInServerRequestInterfaceInstancesUsingGetJsonRequests() { Route::get('test-route', function (ServerRequestInterface $request) {