diff --git a/src/Forms/Validator.php b/src/Forms/Validator.php index 7e7cdba4b..136c19fb6 100644 --- a/src/Forms/Validator.php +++ b/src/Forms/Validator.php @@ -225,7 +225,7 @@ public static function validateSubmitted(Controls\SubmitButton $control): bool */ public static function validateEmail(IControl $control): bool { - return Validators::isEmail($control->getValue()); + return Validators::isEmail((string) $control->getValue()); } @@ -234,10 +234,12 @@ public static function validateEmail(IControl $control): bool */ public static function validateUrl(IControl $control): bool { - if (Validators::isUrl($value = $control->getValue())) { + $value = (string) $control->getValue(); + if (Validators::isUrl($value)) { return true; - - } elseif (Validators::isUrl($value = "http://$value")) { + } + $value = "http://$value"; + if (Validators::isUrl($value)) { $control->setValue($value); return true; } diff --git a/tests/Forms/Controls.TextInput.valueObjectValidation.phpt b/tests/Forms/Controls.TextInput.valueObjectValidation.phpt new file mode 100644 index 000000000..68168f4ab --- /dev/null +++ b/tests/Forms/Controls.TextInput.valueObjectValidation.phpt @@ -0,0 +1,60 @@ +value = $value; + } + + + public function __toString(): string + { + return $this->value; + } +} + + +test(function (): void { // e-mail + $form = new Form; + $input = $form->addEmail('email'); + + $input->setValue(new ValueObject('example@example.com')); + Assert::type(ValueObject::class, $input->getValue()); + $form->validate(); + Assert::same([], $form->getErrors()); +}); + + +test(function (): void { // URL + $form = new Form; + $input = $form->addText('url') + ->addRule(Form::URL); + + $input->setValue(new ValueObject('https://example.com')); + Assert::type(ValueObject::class, $input->getValue()); + $form->validate(); + Assert::same([], $form->getErrors()); + + $input->setValue(new ValueObject('example.com')); + Assert::type(ValueObject::class, $input->getValue()); + $form->validate(); + Assert::same([], $form->getErrors()); +});