Skip to content

Commit 4655805

Browse files
authored
fix: backported #47914 (#47919)
1 parent aeb8205 commit 4655805

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/Illuminate/Http/Request.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use RuntimeException;
1313
use Symfony\Component\HttpFoundation\Exception\SessionNotFoundException;
1414
use Symfony\Component\HttpFoundation\InputBag;
15-
use Symfony\Component\HttpFoundation\ParameterBag;
1615
use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
1716
use Symfony\Component\HttpFoundation\Session\SessionInterface;
1817

@@ -404,7 +403,7 @@ public function get(string $key, mixed $default = null): mixed
404403
public function json($key = null, $default = null)
405404
{
406405
if (! isset($this->json)) {
407-
$this->json = new ParameterBag((array) json_decode($this->getContent(), true));
406+
$this->json = new InputBag((array) json_decode($this->getContent(), true));
408407
}
409408

410409
if (is_null($key)) {
@@ -488,7 +487,7 @@ public static function createFromBase(SymfonyRequest $request)
488487
$newRequest->content = $request->content;
489488

490489
if ($newRequest->isJson()) {
491-
$newRequest->request = new InputBag($newRequest->json()->all());
490+
$newRequest->request = $newRequest->json();
492491
}
493492

494493
return $newRequest;

tests/Http/HttpRequestTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1574,4 +1574,34 @@ public function testGeneratingJsonRequestFromParentRequestUsesCorrectType()
15741574
$this->assertInstanceOf(InputBag::class, $request->getPayload());
15751575
$this->assertSame('world', $request->getPayload()->get('hello'));
15761576
}
1577+
1578+
public function testJsonRequestsCanMergeDataIntoJsonRequest()
1579+
{
1580+
if (! method_exists(SymfonyRequest::class, 'getPayload')) {
1581+
return;
1582+
}
1583+
1584+
$base = SymfonyRequest::create('/', 'POST', server: ['CONTENT_TYPE' => 'application/json'], content: '{"first":"Taylor","last":"Otwell"}');
1585+
$request = Request::createFromBase($base);
1586+
1587+
$request->merge([
1588+
'name' => $request->get('first').' '.$request->get('last'),
1589+
]);
1590+
1591+
$this->assertSame('Taylor Otwell', $request->get('name'));
1592+
}
1593+
1594+
public function testItCanHaveObjectsInJsonPayload()
1595+
{
1596+
if (! method_exists(SymfonyRequest::class, 'getPayload')) {
1597+
return;
1598+
}
1599+
1600+
$base = SymfonyRequest::create('/', 'POST', server: ['CONTENT_TYPE' => 'application/json'], content: '{"framework":{"name":"Laravel"}}');
1601+
$request = Request::createFromBase($base);
1602+
1603+
$value = $request->get('framework');
1604+
1605+
$this->assertSame(['name' => 'Laravel'], $request->get('framework'));
1606+
}
15771607
}

0 commit comments

Comments
 (0)