Skip to content

Commit 4cb7660

Browse files
authored
Allow request input to be retrieved as a collection (#38832)
* Allow request input to be retrieved as a collection * Fix docblock spacing -- styleci * Remove default input value when collecting key
1 parent c0c46a4 commit 4cb7660

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

src/Illuminate/Http/Concerns/InteractsWithInput.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,17 @@ public function boolean($key = null, $default = false)
296296
return filter_var($this->input($key, $default), FILTER_VALIDATE_BOOLEAN);
297297
}
298298

299+
/**
300+
* Retrieve input from the request as a collection.
301+
*
302+
* @param string|null $key
303+
* @return \Illuminate\Support\Collection
304+
*/
305+
public function collect($key = null)
306+
{
307+
return collect($this->input($key));
308+
}
309+
299310
/**
300311
* Get a subset containing the provided keys with values from the input data.
301312
*

tests/Http/HttpRequestTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Illuminate\Http\UploadedFile;
77
use Illuminate\Routing\Route;
88
use Illuminate\Session\Store;
9+
use Illuminate\Support\Collection;
910
use Mockery as m;
1011
use PHPUnit\Framework\TestCase;
1112
use RuntimeException;
@@ -502,6 +503,26 @@ public function testBooleanMethod()
502503
$this->assertFalse($request->boolean('some_undefined_key'));
503504
}
504505

506+
public function testCollectMethod()
507+
{
508+
$request = Request::create('/', 'GET', ['users' => [1, 2, 3]]);
509+
510+
$this->assertInstanceOf(Collection::class, $request->collect('users'));
511+
$this->assertTrue($request->collect('developers')->isEmpty());
512+
$this->assertEquals([1, 2, 3], $request->collect('users')->all());
513+
$this->assertEquals(['users' => [1, 2, 3]], $request->collect()->all());
514+
515+
$request = Request::create('/', 'GET', ['text-payload']);
516+
$this->assertEquals(['text-payload'], $request->collect()->all());
517+
518+
$request = Request::create('/', 'GET', ['email' => '[email protected]']);
519+
$this->assertEquals(['[email protected]'], $request->collect('email')->all());
520+
521+
$request = Request::create('/', 'GET', []);
522+
$this->assertInstanceOf(Collection::class, $request->collect());
523+
$this->assertTrue($request->collect()->isEmpty());
524+
}
525+
505526
public function testArrayAccess()
506527
{
507528
$request = Request::create('/', 'GET', ['name' => null, 'foo' => ['bar' => null, 'baz' => '']]);

0 commit comments

Comments
 (0)