diff --git a/src/Illuminate/Http/Concerns/InteractsWithInput.php b/src/Illuminate/Http/Concerns/InteractsWithInput.php index a8c6a37aeb54..b40a74bc0c2a 100644 --- a/src/Illuminate/Http/Concerns/InteractsWithInput.php +++ b/src/Illuminate/Http/Concerns/InteractsWithInput.php @@ -430,4 +430,36 @@ protected function retrieveItem($source, $key, $default) return $this->$source->get($key, $default); } + + /** + * Apply the callback if the request contains the given input item key. + * + * @param string $key + * @param callable $callback + * @return $this + */ + public function whenHas($key, callable $callback) + { + if ($this->has($key)) { + $callback(data_get($this->all(), $key)); + } + + 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 10be6e8831de..0136857fc2fd 100644 --- a/tests/Http/HttpRequestTest.php +++ b/tests/Http/HttpRequestTest.php @@ -300,6 +300,62 @@ public function testHasMethod() $this->assertTrue($request->has('foo.baz')); } + public function testWhenHasMethod() + { + $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => '', 'city' => null]); + + $name = $age = $city = $foo = false; + + $request->whenHas('name', function ($value) use (&$name) { + $name = $value; + }); + + $request->whenHas('age', function ($value) use (&$age) { + $age = $value; + }); + + $request->whenHas('city', function ($value) use (&$city) { + $city = $value; + }); + + $request->whenHas('foo', function () use (&$foo) { + $foo = 'test'; + }); + + $this->assertSame('Taylor', $name); + $this->assertSame('', $age); + $this->assertNull($city); + $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() { $request = Request::create('/', 'GET', ['name' => 'Taylor', 'age' => '', 'city' => null]);