From f707fb25581bf86c1bc13884572af831e8950834 Mon Sep 17 00:00:00 2001 From: kenjis Date: Mon, 14 Aug 2023 11:43:48 +0900 Subject: [PATCH 1/2] docs: add test for rule instance count --- tests/system/Validation/ValidationTest.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/system/Validation/ValidationTest.php b/tests/system/Validation/ValidationTest.php index 4c47414f6d02..8f05442c74bb 100644 --- a/tests/system/Validation/ValidationTest.php +++ b/tests/system/Validation/ValidationTest.php @@ -240,6 +240,22 @@ public function testRunReturnsFalseWithNothingToDo(): void $this->assertFalse($this->validation->run([])); } + public function testRuleClassesInstantiatedOnce(): void + { + $this->validation->setRules([]); + $this->validation->run([]); + $count1 = count( + $this->getPrivateProperty($this->validation, 'ruleSetInstances') + ); + + $this->validation->run([]); + $count2 = count( + $this->getPrivateProperty($this->validation, 'ruleSetInstances') + ); + + $this->assertSame($count1, $count2); + } + public function testRunDoesTheBasics(): void { $data = ['foo' => 'notanumber']; From 6ff41c965116fe5b9cae0a06984af597fda36f49 Mon Sep 17 00:00:00 2001 From: kenjis Date: Mon, 14 Aug 2023 11:54:55 +0900 Subject: [PATCH 2/2] fix: instances of validation rules are incremented each time run() is executed --- system/Validation/Validation.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system/Validation/Validation.php b/system/Validation/Validation.php index 3d32929a42d6..4ed4d089c4cb 100644 --- a/system/Validation/Validation.php +++ b/system/Validation/Validation.php @@ -107,6 +107,8 @@ public function __construct($config, RendererInterface $view) $this->config = $config; $this->view = $view; + + $this->loadRuleSets(); } /** @@ -127,7 +129,6 @@ public function run(?array $data = null, ?string $group = null, ?string $dbGroup // `DBGroup` is a reserved name. For is_unique and is_not_unique $data['DBGroup'] = $dbGroup; - $this->loadRuleSets(); $this->loadRuleGroup($group); // If no rules exist, we return false to ensure