diff --git a/src/Illuminate/Validation/ValidationRuleParser.php b/src/Illuminate/Validation/ValidationRuleParser.php index b8e42559dbec..ef7bfb630a6f 100644 --- a/src/Illuminate/Validation/ValidationRuleParser.php +++ b/src/Illuminate/Validation/ValidationRuleParser.php @@ -131,7 +131,7 @@ protected function explodeWildcardRules($results, $attribute, $rules) foreach ($data as $key => $value) { if (Str::startsWith($key, $attribute) || (bool) preg_match('/^'.$pattern.'\z/', $key)) { foreach ((array) $rules as $rule) { - $this->implicitAttributes[$attribute][] = $key; + $this->implicitAttributes[$attribute][] = strval($key); $results = $this->mergeRules($results, $key, $rule); } diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 8b8f04a24cd0..c76935c5fcb1 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -1899,6 +1899,29 @@ public function testValidateDistinct() $this->assertEquals('There is a duplication!', $v->messages()->first('foo.1')); } + public function testValidateDistinctForTopLevelArrays() + { + $trans = $this->getIlluminateArrayTranslator(); + + $v = new Validator($trans, ['foo', 'foo'], ['*' => 'distinct']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, [['foo' => 1], ['foo' => 1]], ['*' => 'array', '*.foo' => 'distinct']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, [['foo' => 'a'], ['foo' => 'A']], ['*' => 'array', '*.foo' => 'distinct:ignore_case']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, [['foo' => [['id' => 1]]], ['foo' => [['id' => 1]]]], ['*' => 'array', '*.foo' => 'array', '*.foo.*.id' => 'distinct']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo', 'foo'], ['*' => 'distinct'], ['*.distinct' => 'There is a duplication!']); + $this->assertFalse($v->passes()); + $v->messages()->setFormat(':message'); + $this->assertEquals('There is a duplication!', $v->messages()->first('0')); + $this->assertEquals('There is a duplication!', $v->messages()->first('1')); + } + public function testValidateUnique() { $trans = $this->getIlluminateArrayTranslator();