Skip to content

Commit 6615371

Browse files
taylorotwelldriesvints
authored andcommitted
fix validation nested error messages
1 parent d6fc44b commit 6615371

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/Illuminate/Validation/Concerns/FormatsMessages.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,16 @@ protected function getFromLocalArray($attribute, $lowerRule, $source = null)
9898
// that is not attribute specific. If we find either we'll return it.
9999
foreach ($keys as $key) {
100100
foreach (array_keys($source) as $sourceKey) {
101+
if (strpos($sourceKey, '*') !== false) {
102+
$pattern = str_replace('\*', '([^.]*)', preg_quote($sourceKey, '#'));
103+
104+
if (preg_match('#^'.$pattern.'\z#u', $key) === 1) {
105+
return $source[$sourceKey];
106+
}
107+
108+
continue;
109+
}
110+
101111
if (Str::is($sourceKey, $key)) {
102112
return $source[$sourceKey];
103113
}

tests/Validation/ValidationValidatorTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,32 @@ protected function tearDown(): void
3636
m::close();
3737
}
3838

39+
public function testNestedErrorMessagesAreRetrievedFromLocalArray()
40+
{
41+
$trans = $this->getIlluminateArrayTranslator();
42+
$v = new Validator($trans, [
43+
'users' => [
44+
[
45+
'name' => 'Taylor Otwell',
46+
'posts' => [
47+
[
48+
'name' => '',
49+
]
50+
],
51+
],
52+
],
53+
], [
54+
'users.*.name' => ['required'],
55+
'users.*.posts.*.name' => ['required'],
56+
], [
57+
'users.*.name.required' => 'user name is required',
58+
'users.*.posts.*.name.required' => 'post name is required',
59+
]);
60+
61+
$this->assertFalse($v->passes());
62+
$this->assertEquals('post name is required', $v->errors()->all()[0]);
63+
}
64+
3965
public function testSometimesWorksOnNestedArrays()
4066
{
4167
$trans = $this->getIlluminateArrayTranslator();

0 commit comments

Comments
 (0)