Skip to content

Commit 37f96f1

Browse files
authored
Fix validation message when there is a parameter with escaped dot "\." (#53416)
* fix * style fix
1 parent 988de8a commit 37f96f1

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/Illuminate/Validation/Validator.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,19 @@ protected function replacePlaceholderInString(string $value)
409409
);
410410
}
411411

412+
/**
413+
* Replace each field parameter dot placeholder with dot.
414+
*
415+
* @param string $value
416+
* @return string
417+
*/
418+
protected function replaceDotPlaceholderInParameters(array $parameters)
419+
{
420+
return array_map(function ($field) {
421+
return str_replace($this->dotPlaceholder, '.', $field);
422+
}, $parameters);
423+
}
424+
412425
/**
413426
* Add an after validation callback.
414427
*
@@ -934,6 +947,10 @@ public function addFailure($attribute, $rule, $parameters = [])
934947
return $this->excludeAttribute($attribute);
935948
}
936949

950+
if ($this->dependsOnOtherFields($rule)) {
951+
$parameters = $this->replaceDotPlaceholderInParameters($parameters);
952+
}
953+
937954
$this->messages->add($attribute, $this->makeReplacements(
938955
$this->getMessage($attributeWithPlaceholders, $rule), $attribute, $rule, $parameters
939956
));

tests/Validation/ValidationValidatorTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7074,6 +7074,26 @@ public function testPlaceholdersAreReplaced()
70747074
$this->assertArrayHasKey('foo.bar', $v->validated());
70757075
}
70767076

7077+
public function testDotPlaceholdersInParametersAreReplacedIn()
7078+
{
7079+
$trans = $this->getIlluminateArrayTranslator();
7080+
$trans->addLines(['validation.required_without' => 'The :attribute field is required when :values is not present.'], 'en');
7081+
7082+
// Single parameter
7083+
$v = new Validator($trans, [], [
7084+
'name' => 'required_without:user\.name',
7085+
]);
7086+
$this->assertTrue($v->fails());
7087+
$this->assertSame('The name field is required when user.name is not present.', $v->messages()->first());
7088+
7089+
// Multiple parameters
7090+
$v = new Validator($trans, [], [
7091+
'name' => 'required_without:user\.name,admin\.name',
7092+
]);
7093+
$this->assertTrue($v->fails());
7094+
$this->assertSame('The name field is required when user.name / admin.name is not present.', $v->messages()->first());
7095+
}
7096+
70777097
public function testCoveringEmptyKeys()
70787098
{
70797099
$trans = $this->getIlluminateArrayTranslator();

0 commit comments

Comments
 (0)