Skip to content

Commit bef402d

Browse files
drobek94martin.sedlacek
authored andcommitted
Validator: added support for enums (#282)
Co-authored-by: martin.sedlacek <[email protected]>
1 parent c67a0d5 commit bef402d

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/Forms/Validator.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ public static function validateEqual(Control $control, $arg): bool
113113

114114
foreach ($values as $val) {
115115
foreach ($args as $item) {
116+
if ($item instanceof \BackedEnum) {
117+
$item = $item->value;
118+
}
119+
116120
if ((string) $val === (string) $item) {
117121
continue 2;
118122
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\Forms\Controls\BaseControl & enum
5+
* @phpVersion 8.1
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
use Nette\Forms\Form;
11+
use Nette\Forms\Validator;
12+
use Tester\Assert;
13+
14+
require __DIR__ . '/../bootstrap.php';
15+
16+
17+
enum TestEnum: string
18+
{
19+
case CASE_1 = 'case 1';
20+
case CASE_2 = 'case 2';
21+
}
22+
23+
24+
before(function () {
25+
Form::initialize(true);
26+
});
27+
28+
29+
test('validators for enums', function () {
30+
$form = new Form;
31+
$input = $form->addText('text');
32+
$input->setValue(TestEnum::CASE_1->value);
33+
34+
Assert::true(Validator::validateEqual($input, TestEnum::CASE_1));
35+
Assert::true(Validator::validateEqual($input, 'case 1'));
36+
Assert::false(Validator::validateEqual($input, TestEnum::CASE_2));
37+
Assert::false(Validator::validateEqual($input, 1));
38+
});

0 commit comments

Comments
 (0)