Skip to content

Commit 0020f7d

Browse files
Merge pull request #1345 from creative-commoners/pulls/7/form-field-valid
ENH Use FieldValidator for FormFields
2 parents 781d65a + 2b9c6cc commit 0020f7d

File tree

4 files changed

+21
-38
lines changed

4 files changed

+21
-38
lines changed

Diff for: code/Form/UserFormsRequiredFields.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ public function php($data)
3636
$fields = $this->form->Fields();
3737

3838
foreach ($fields as $field) {
39-
$valid = ($field->validate($this) && $valid);
39+
$result = $field->validate();
40+
$valid = $result->isValid() && $valid;
41+
$this->result->combineAnd($result);
4042
}
4143

4244
if (empty($this->required)) {

Diff for: code/FormField/UserFormsCheckboxSetField.php

+10-27
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace SilverStripe\UserForms\FormField;
44

5+
use SilverStripe\Core\Validation\ValidationResult;
56
use SilverStripe\Forms\CheckboxSetField;
6-
use SilverStripe\UserForms\Model\EditableFormField;
77

88
/**
99
* @package userforms
@@ -45,33 +45,16 @@ public function getOptions()
4545
return $options;
4646
}
4747

48-
/**
49-
* @inheritdoc
50-
*
51-
* @param Validator $validator
52-
*
53-
* @return bool
54-
*/
55-
public function validate($validator)
48+
public function getValueForValidation(): mixed
5649
{
57-
// get the previous values (could contain comma-delimited list)
58-
59-
$previous = $value = $this->Value();
60-
61-
if (is_string($value) && strstr($value ?? '', ",")) {
62-
$value = explode(",", $value ?? '');
50+
$value = $this->Value();
51+
if (is_iterable($value) || is_null($value)) {
52+
return $value;
6353
}
64-
65-
// set the value as an array for parent validation
66-
67-
$this->setValue($value);
68-
69-
$validated = parent::validate($validator);
70-
71-
// restore previous value after validation
72-
73-
$this->setValue($previous);
74-
75-
return $validated;
54+
// Value may contain a comma-delimited list of values
55+
if (is_string($value) && strstr($value, ',')) {
56+
return explode(',', $value);
57+
}
58+
return [$value];
7659
}
7760
}

Diff for: tests/php/Control/UserDefinedFormControllerTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public function testValidation()
155155
'required-email' => 'invalid',
156156
'required-text' => 'bob'
157157
]);
158-
$this->assertStringContainsString('Please enter an email address', $response->getBody());
158+
$this->assertStringContainsString('Invalid email address', $response->getBody());
159159

160160
// Post with only required
161161
$this->get($form->URLSegment);

Diff for: tests/php/FormField/UserFormsCheckboxSetFieldTest.php

+7-9
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace SilverStripe\UserForms\Tests\FormField;
44

55
use SilverStripe\Dev\SapphireTest;
6-
use SilverStripe\UserForms\Form\UserFormsRequiredFields;
76
use SilverStripe\UserForms\FormField\UserFormsCheckboxSetField;
87
use SilverStripe\UserForms\Model\EditableFormField\EditableCheckboxGroupField;
98

@@ -14,27 +13,26 @@ class UserFormsCheckboxSetFieldTest extends SapphireTest
1413
public function testValidate()
1514
{
1615
$field = new UserFormsCheckboxSetField('Field', 'My field', ['One' => 'One', 'Two' => 'Two']);
17-
$validator = new UserFormsRequiredFields();
1816

1917
// String values
2018
$field->setValue('One');
21-
$this->assertTrue($field->validate($validator));
19+
$this->assertTrue($field->validate()->isValid());
2220
$field->setValue('One,Two');
23-
$this->assertTrue($field->validate($validator));
21+
$this->assertTrue($field->validate()->isValid());
2422
$field->setValue('Three,Four');
25-
$this->assertFalse($field->validate($validator));
23+
$this->assertFalse($field->validate()->isValid());
2624

2725
// Array values
2826
$field->setValue(array('One'));
29-
$this->assertTrue($field->validate($validator));
27+
$this->assertTrue($field->validate()->isValid());
3028
$field->setValue(array('One', 'Two'));
31-
$this->assertTrue($field->validate($validator));
29+
$this->assertTrue($field->validate()->isValid());
3230

3331
// Invalid
3432
$field->setValue('Three');
35-
$this->assertFalse($field->validate($validator));
33+
$this->assertFalse($field->validate()->isValid());
3634
$field->setValue(array('Three', 'Four'));
37-
$this->assertFalse($field->validate($validator));
35+
$this->assertFalse($field->validate()->isValid());
3836
}
3937

4038
public function testCustomErrorMessageValidationAttributesHTML()

0 commit comments

Comments
 (0)