From e678f36af2c16ea2a631fe22c0715e41a7e4900a Mon Sep 17 00:00:00 2001 From: Josh Hornby Date: Thu, 5 May 2016 15:38:17 +0100 Subject: [PATCH] Allow custom validators to be called with out function name --- src/Illuminate/Validation/Validator.php | 6 +++++- tests/Validation/ValidationValidatorTest.php | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Validation/Validator.php b/src/Illuminate/Validation/Validator.php index 4533f57c906..8bdeb018fc0 100755 --- a/src/Illuminate/Validation/Validator.php +++ b/src/Illuminate/Validation/Validator.php @@ -3114,7 +3114,11 @@ protected function callExtension($rule, $parameters) */ protected function callClassBasedExtension($callback, $parameters) { - list($class, $method) = explode('@', $callback); + if (Str::contains($callback, '@')) { + list($class, $method) = explode('@', $callback); + } else { + list($class, $method) = [$callback, '__invoke']; + } return call_user_func_array([$this->container->make($class), $method], $parameters); } diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index e10e011f815..758da252952 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -2045,6 +2045,20 @@ public function testClassBasedCustomValidators() $this->assertEquals('foo!', $v->messages()->first('name')); } + public function testClassBasedCustomValidatorsUsingInvoke() + { + $trans = $this->getRealTranslator(); + $trans->addResource('array', ['validation.foo' => 'foo!'], 'en', 'messages'); + $v = new Validator($trans, ['name' => 'taylor'], ['name' => 'foo']); + $v->setContainer($container = m::mock('Illuminate\Container\Container')); + $v->addExtension('foo', 'Foo'); + $container->shouldReceive('make')->once()->with('Foo')->andReturn($foo = m::mock('StdClass')); + $foo->shouldReceive('__invoke')->once()->andReturn(false); + $this->assertFalse($v->passes()); + $v->messages()->setFormat(':message'); + $this->assertEquals('foo!', $v->messages()->first('name')); + } + public function testCustomImplicitValidators() { $trans = $this->getRealTranslator();