Skip to content

Commit 82cf906

Browse files
committed
fix validation nested error messages
1 parent c8eb163 commit 82cf906

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
@@ -37,6 +37,32 @@ protected function tearDown(): void
3737
m::close();
3838
}
3939

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

0 commit comments

Comments
 (0)