diff --git a/src/Forms/Controls/TextBase.php b/src/Forms/Controls/TextBase.php index d72d0750b..058c2efe1 100644 --- a/src/Forms/Controls/TextBase.php +++ b/src/Forms/Controls/TextBase.php @@ -139,7 +139,7 @@ public function addRule($validator, $errorMessage = null, $arg = null) { foreach ($this->getRules() as $rule) { if (!$rule->canExport() && !$rule->branch) { - return $this; + return parent::addRule($validator, $errorMessage, $arg); } } diff --git a/src/Forms/Controls/TextInput.php b/src/Forms/Controls/TextInput.php index 8d3645267..dd869dbb7 100644 --- a/src/Forms/Controls/TextInput.php +++ b/src/Forms/Controls/TextInput.php @@ -70,7 +70,7 @@ public function addRule($validator, $errorMessage = null, $arg = null) { foreach ($this->getRules() as $rule) { if (!$rule->canExport() && !$rule->branch) { - return $this; + return parent::addRule($validator, $errorMessage, $arg); } } diff --git a/tests/Forms/Rules.valid.phpt b/tests/Forms/Rules.valid.phpt index 0f7b35764..964679b92 100644 --- a/tests/Forms/Rules.valid.phpt +++ b/tests/Forms/Rules.valid.phpt @@ -42,6 +42,44 @@ test('', function () { }, Nette\InvalidArgumentException::class, 'You cannot use Form::VALID in the addRule method.'); }); +test('', function () { + $form = new Form; + $form->addText('foo') + ->addFilter(function ($value) { + return str_replace(' ', '', $value); + }) + ->addRule($form::PATTERN, 'only numbers', '\d{5}'); + + $form['foo']->setValue('160 00'); + $form->validate(); + Assert::same([], $form->getErrors()); + + $form['foo']->setValue('160 00 x'); + $form->validate(); + Assert::same(['only numbers'], $form->getErrors()); +}); + + +test('', function () { + $form = new Form; + $foo = $form->addText('foo'); + $rules = $foo->getRules(); + $rules->addFilter( + function ($value) { + return str_replace(' ', '', $value); + } + ); + $rules->addRule($form::PATTERN, 'only numbers', '\d{5}'); + + $form['foo']->setValue('160 00'); + $form->validate(); + Assert::same([], $form->getErrors()); + + $form['foo']->setValue('160 00 x'); + $form->validate(); + Assert::same(['only numbers'], $form->getErrors()); +}); + test('', function () { Assert::exception(function () {