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()