From 96a9bc7209849f96e78323c44f316ca2caaecd2b Mon Sep 17 00:00:00 2001 From: pascalbaljet Date: Tue, 11 Aug 2020 22:42:45 +0200 Subject: [PATCH 1/4] Added when() method to InteractsWithInput trait --- .../Http/Concerns/InteractsWithInput.php | 16 ++++++++++ tests/Http/HttpRequestTest.php | 31 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/Illuminate/Http/Concerns/InteractsWithInput.php b/src/Illuminate/Http/Concerns/InteractsWithInput.php index a8c6a37aeb54..da0b8a8172ea 100644 --- a/src/Illuminate/Http/Concerns/InteractsWithInput.php +++ b/src/Illuminate/Http/Concerns/InteractsWithInput.php @@ -430,4 +430,20 @@ protected function retrieveItem($source, $key, $default) return $this->$source->get($key, $default); } + + /** + * Apply the callback if the request contains a given input item key. + * + * @param string $key + * @param callable|null $callback + * @return $this + */ + public function when($key, callable $callback) + { + if ($this->has($key)) { + $callback(data_get($this->all(), $key)); + } + + return $this; + } } diff --git a/tests/Http/HttpRequestTest.php b/tests/Http/HttpRequestTest.php index 10be6e8831de..55d48cf8d96f 100644 --- a/tests/Http/HttpRequestTest.php +++ b/tests/Http/HttpRequestTest.php @@ -300,6 +300,37 @@ public function testHasMethod() $this->assertTrue($request->has('foo.baz')); } + public function testWhenMethod() + { + $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => '', 'city' => null]); + + $name = null; + $age = null; + $city = ''; + $foo = null; + + $request->when('name', function ($value) use (&$name) { + $name = $value; + }); + + $request->when('age', function ($value) use (&$age) { + $age = $value; + }); + + $request->when('city', function ($value) use (&$city) { + $city = $value; + }); + + $request->when('foo', function () use (&$foo) { + $foo = 'test'; + }); + + $this->assertSame('Taylor', $name); + $this->assertSame('', $age); + $this->assertNull($city); + $this->assertNull($foo); + } + public function testMissingMethod() { $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => '', 'city' => null]); From a208a76d5c99ed19063a0dd71266c67452a69cf1 Mon Sep 17 00:00:00 2001 From: pascalbaljet Date: Tue, 11 Aug 2020 22:44:27 +0200 Subject: [PATCH 2/4] Update InteractsWithInput.php --- src/Illuminate/Http/Concerns/InteractsWithInput.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Http/Concerns/InteractsWithInput.php b/src/Illuminate/Http/Concerns/InteractsWithInput.php index da0b8a8172ea..df536f8d75b9 100644 --- a/src/Illuminate/Http/Concerns/InteractsWithInput.php +++ b/src/Illuminate/Http/Concerns/InteractsWithInput.php @@ -434,8 +434,8 @@ protected function retrieveItem($source, $key, $default) /** * Apply the callback if the request contains a given input item key. * - * @param string $key - * @param callable|null $callback + * @param string $key + * @param callable $callback * @return $this */ public function when($key, callable $callback) From e00a84be5f0ae21b53725081471aadda300581fd Mon Sep 17 00:00:00 2001 From: pascalbaljet Date: Tue, 11 Aug 2020 23:11:45 +0200 Subject: [PATCH 3/4] Styling --- tests/Http/HttpRequestTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Http/HttpRequestTest.php b/tests/Http/HttpRequestTest.php index 55d48cf8d96f..add3f6ebd7c8 100644 --- a/tests/Http/HttpRequestTest.php +++ b/tests/Http/HttpRequestTest.php @@ -305,9 +305,9 @@ public function testWhenMethod() $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => '', 'city' => null]); $name = null; - $age = null; + $age = null; $city = ''; - $foo = null; + $foo = null; $request->when('name', function ($value) use (&$name) { $name = $value; From 3a518c776dd9ff719cc081281272fb839edb1c8e Mon Sep 17 00:00:00 2001 From: pascalbaljet Date: Wed, 12 Aug 2020 23:39:44 +0200 Subject: [PATCH 4/4] Renamed when() to whenHas() + Added whenFilled() method --- .../Http/Concerns/InteractsWithInput.php | 20 ++++++++- tests/Http/HttpRequestTest.php | 45 ++++++++++++++----- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/src/Illuminate/Http/Concerns/InteractsWithInput.php b/src/Illuminate/Http/Concerns/InteractsWithInput.php index df536f8d75b9..b40a74bc0c2a 100644 --- a/src/Illuminate/Http/Concerns/InteractsWithInput.php +++ b/src/Illuminate/Http/Concerns/InteractsWithInput.php @@ -432,13 +432,13 @@ protected function retrieveItem($source, $key, $default) } /** - * Apply the callback if the request contains a given input item key. + * Apply the callback if the request contains the given input item key. * * @param string $key * @param callable $callback * @return $this */ - public function when($key, callable $callback) + public function whenHas($key, callable $callback) { if ($this->has($key)) { $callback(data_get($this->all(), $key)); @@ -446,4 +446,20 @@ public function when($key, callable $callback) return $this; } + + /** + * Apply the callback if the request contains a non-empty value for the given input item key. + * + * @param string $key + * @param callable $callback + * @return $this + */ + public function whenFilled($key, callable $callback) + { + if ($this->filled($key)) { + $callback(data_get($this->all(), $key)); + } + + return $this; + } } diff --git a/tests/Http/HttpRequestTest.php b/tests/Http/HttpRequestTest.php index add3f6ebd7c8..0136857fc2fd 100644 --- a/tests/Http/HttpRequestTest.php +++ b/tests/Http/HttpRequestTest.php @@ -300,35 +300,60 @@ public function testHasMethod() $this->assertTrue($request->has('foo.baz')); } - public function testWhenMethod() + public function testWhenHasMethod() { $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => '', 'city' => null]); - $name = null; - $age = null; - $city = ''; - $foo = null; + $name = $age = $city = $foo = false; - $request->when('name', function ($value) use (&$name) { + $request->whenHas('name', function ($value) use (&$name) { $name = $value; }); - $request->when('age', function ($value) use (&$age) { + $request->whenHas('age', function ($value) use (&$age) { $age = $value; }); - $request->when('city', function ($value) use (&$city) { + $request->whenHas('city', function ($value) use (&$city) { $city = $value; }); - $request->when('foo', function () use (&$foo) { + $request->whenHas('foo', function () use (&$foo) { $foo = 'test'; }); $this->assertSame('Taylor', $name); $this->assertSame('', $age); $this->assertNull($city); - $this->assertNull($foo); + $this->assertFalse($foo); + } + + public function testWhenFilledMethod() + { + $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => '', 'city' => null]); + + $name = $age = $city = $foo = false; + + $request->whenFilled('name', function ($value) use (&$name) { + $name = $value; + }); + + $request->whenFilled('age', function ($value) use (&$age) { + $age = 'test'; + }); + + $request->whenFilled('city', function ($value) use (&$city) { + $city = 'test'; + }); + + $request->whenFilled('foo', function () use (&$foo) { + $foo = 'test'; + }); + + $this->assertSame('Taylor', $name); + $this->assertFalse($age); + $this->assertFalse($city); + $this->assertFalse($foo); } public function testMissingMethod()