From 322dcd81be90741517960d22060ea262a8bb5c09 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 24 Jul 2025 23:00:16 +0300 Subject: [PATCH 1/5] refactor --- tests/Rule/{ => Nested}/NestedTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/Rule/{ => Nested}/NestedTest.php (99%) diff --git a/tests/Rule/NestedTest.php b/tests/Rule/Nested/NestedTest.php similarity index 99% rename from tests/Rule/NestedTest.php rename to tests/Rule/Nested/NestedTest.php index 24102496..3c4f1130 100644 --- a/tests/Rule/NestedTest.php +++ b/tests/Rule/Nested/NestedTest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Yiisoft\Validator\Tests\Rule; +namespace Yiisoft\Validator\Tests\Rule\Nested; use ArrayObject; use InvalidArgumentException; From 274a099465cf1c9c9bb6f1e9861b9264a4426e26 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 24 Jul 2025 23:15:27 +0300 Subject: [PATCH 2/5] cleanup nested --- src/Rule/Nested.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Rule/Nested.php b/src/Rule/Nested.php index fddc795c..fe1e5db2 100644 --- a/src/Rule/Nested.php +++ b/src/Rule/Nested.php @@ -25,7 +25,6 @@ use Yiisoft\Validator\RulesProviderInterface; use Yiisoft\Validator\SkipOnEmptyInterface; use Yiisoft\Validator\SkipOnErrorInterface; -use Yiisoft\Validator\Tests\Rule\NestedTest; use Yiisoft\Validator\WhenInterface; use function array_pop; From f3d0638d86a93e8e4cc739e2f040c51ab78d62ef Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 24 Jul 2025 23:15:59 +0300 Subject: [PATCH 3/5] test --- .../NestedPropertyTranslator/MainForm.php | 15 +++++++++++ .../NestedPropertyTranslatorTest.php | 26 +++++++++++++++++++ .../NestedPropertyTranslator/SubForm.php | 20 ++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 tests/Rule/Nested/NestedPropertyTranslator/MainForm.php create mode 100644 tests/Rule/Nested/NestedPropertyTranslator/NestedPropertyTranslatorTest.php create mode 100644 tests/Rule/Nested/NestedPropertyTranslator/SubForm.php diff --git a/tests/Rule/Nested/NestedPropertyTranslator/MainForm.php b/tests/Rule/Nested/NestedPropertyTranslator/MainForm.php new file mode 100644 index 00000000..7347e094 --- /dev/null +++ b/tests/Rule/Nested/NestedPropertyTranslator/MainForm.php @@ -0,0 +1,15 @@ +validate($form); + + assertSame( + ['Телефон must contain at least 5 characters.'], + $result->getErrorMessages() + ); + } +} diff --git a/tests/Rule/Nested/NestedPropertyTranslator/SubForm.php b/tests/Rule/Nested/NestedPropertyTranslator/SubForm.php new file mode 100644 index 00000000..10d3d824 --- /dev/null +++ b/tests/Rule/Nested/NestedPropertyTranslator/SubForm.php @@ -0,0 +1,20 @@ + 'Телефон', + ]); + } +} From f73c3259025688375335bd0ccade7133624e5e1b Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Thu, 24 Jul 2025 23:26:51 +0300 Subject: [PATCH 4/5] fix --- CHANGELOG.md | 2 +- src/ValidationContext.php | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07cae8b2..c9f09e7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 2.5.1 under development -- no changes in this release. +- Bug #776: Take `PropertyTranslatorProviderInterface` into account during context validation (@vjik) ## 2.5.0 July 19, 2025 diff --git a/src/ValidationContext.php b/src/ValidationContext.php index 54654642..c29851cd 100644 --- a/src/ValidationContext.php +++ b/src/ValidationContext.php @@ -156,15 +156,20 @@ public function validate(mixed $data, callable|iterable|object|string|null $rule $currentProperty = $this->property; $isCurrentDataSetMissing = $this->isDataSetMissing; $currentParameters = $this->parameters; + $currentDefaultPropertyTranslator = $this->defaultPropertyTranslator; // The lack of a property means that in the context of further validation there is no data set at all. $this->isDataSetMissing = $this->isPropertyMissing(); + if ($data instanceof PropertyTranslatorProviderInterface) { + $this->defaultPropertyTranslator = $data->getPropertyTranslator() ?? $currentDefaultPropertyTranslator; + } $result = $this->validator->validate($data, $rules, $this); $this->dataSet = $currentDataSet; $this->property = $currentProperty; $this->isDataSetMissing = $isCurrentDataSetMissing; $this->parameters = $currentParameters; + $this->defaultPropertyTranslator = $currentDefaultPropertyTranslator; return $result; } From 4cf935db6a73c7f60108bc916284b4e36845ccca Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Thu, 24 Jul 2025 20:35:51 +0000 Subject: [PATCH 5/5] Apply fixes from StyleCI --- tests/Rule/Nested/NestedPropertyTranslator/MainForm.php | 3 ++- tests/Rule/Nested/NestedPropertyTranslator/SubForm.php | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/Rule/Nested/NestedPropertyTranslator/MainForm.php b/tests/Rule/Nested/NestedPropertyTranslator/MainForm.php index 7347e094..9b63d5f3 100644 --- a/tests/Rule/Nested/NestedPropertyTranslator/MainForm.php +++ b/tests/Rule/Nested/NestedPropertyTranslator/MainForm.php @@ -6,7 +6,8 @@ use Yiisoft\Validator\Rule\Nested; -final class MainForm { +final class MainForm +{ public function __construct( #[Nested] public SubForm $sub, diff --git a/tests/Rule/Nested/NestedPropertyTranslator/SubForm.php b/tests/Rule/Nested/NestedPropertyTranslator/SubForm.php index 10d3d824..7750b927 100644 --- a/tests/Rule/Nested/NestedPropertyTranslator/SubForm.php +++ b/tests/Rule/Nested/NestedPropertyTranslator/SubForm.php @@ -9,10 +9,13 @@ use Yiisoft\Validator\PropertyTranslatorProviderInterface; use Yiisoft\Validator\Rule\Length; -final class SubForm implements PropertyTranslatorProviderInterface { +final class SubForm implements PropertyTranslatorProviderInterface +{ #[Length(min: 5)] public string $phone = '123'; - public function getPropertyTranslator(): ?PropertyTranslatorInterface { + + public function getPropertyTranslator(): ?PropertyTranslatorInterface + { return new ArrayPropertyTranslator([ 'phone' => 'Телефон', ]);