From 4faad0f33314699778ecadb1fdd766de24107b9f Mon Sep 17 00:00:00 2001 From: Mohamed Said Date: Mon, 10 Apr 2017 16:28:41 +0200 Subject: [PATCH] make request work accept key arguments to limit results to only those keys --- .../Http/Concerns/InteractsWithInput.php | 16 ++++++++++++++-- tests/Http/HttpRequestTest.php | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Http/Concerns/InteractsWithInput.php b/src/Illuminate/Http/Concerns/InteractsWithInput.php index 4a660a72b3da..c6a91299e540 100644 --- a/src/Illuminate/Http/Concerns/InteractsWithInput.php +++ b/src/Illuminate/Http/Concerns/InteractsWithInput.php @@ -117,9 +117,21 @@ protected function isEmptyString($key) * * @return array */ - public function all() + public function all($keys = null) { - return array_replace_recursive($this->input(), $this->allFiles()); + $input = array_replace_recursive($this->input(), $this->allFiles()); + + if (! $keys) { + return $input; + } + + $results = []; + + foreach (is_array($keys) ? $keys : func_get_args() as $key) { + Arr::set($results, $key, Arr::get($input, $key)); + } + + return $results; } /** diff --git a/tests/Http/HttpRequestTest.php b/tests/Http/HttpRequestTest.php index f04f85be8b72..0a7e5d7dbc3d 100644 --- a/tests/Http/HttpRequestTest.php +++ b/tests/Http/HttpRequestTest.php @@ -243,6 +243,21 @@ public function testInputMethod() $this->assertInstanceOf('Symfony\Component\HttpFoundation\File\UploadedFile', $request['file']); } + public function testAllMethod() + { + $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => null]); + $this->assertEquals(['name' => 'Taylor', 'age' => null, 'email' => null], $request->all('name', 'age', 'email')); + $this->assertEquals(['name' => 'Taylor'], $request->all('name')); + $this->assertEquals(['name' => 'Taylor', 'age' => null], $request->all()); + + $request = Request::create('/', 'GET', ['developer' => ['name' => 'Taylor', 'age' => null]]); + $this->assertEquals(['developer' => ['name' => 'Taylor', 'skills' => null]], $request->all('developer.name', 'developer.skills')); + $this->assertEquals(['developer' => ['name' => 'Taylor', 'skills' => null]], $request->all(['developer.name', 'developer.skills'])); + $this->assertEquals(['developer' => ['age' => null]], $request->all('developer.age')); + $this->assertEquals(['developer' => ['skills' => null]], $request->all('developer.skills')); + $this->assertEquals(['developer' => ['name' => 'Taylor', 'age' => null]], $request->all()); + } + public function testOnlyMethod() { $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => null]);