diff --git a/docs/en/02_Developer_Guides/03_Forms/01_Validation.md b/docs/en/02_Developer_Guides/03_Forms/01_Validation.md index 191ddd2a7..f9e25e939 100644 --- a/docs/en/02_Developer_Guides/03_Forms/01_Validation.md +++ b/docs/en/02_Developer_Guides/03_Forms/01_Validation.md @@ -275,7 +275,7 @@ class MyController extends Controller In the CMS, we're not creating the forms for editing CMS records. The `Form` instance is generated for us so we cannot call `setValidator` easily. However, a `DataObject` can provide its' own `Validator` instance/s through the -`getCompositeValidator()` method. The CMS interfaces such as [LeftAndMain](api:SilverStripe\Admin\LeftAndMain), +`getCMSCompositeValidator()` method. The CMS interfaces such as [LeftAndMain](api:SilverStripe\Admin\LeftAndMain), [ModelAdmin](api:SilverStripe\Admin\ModelAdmin) and [GridField](api:SilverStripe\Forms\GridField\GridField) will respect the provided `Validator`/s and handle displaying error and success responses to the user. diff --git a/src/Forms/CompositeValidator.php b/src/Forms/CompositeValidator.php index 89f16e699..61ead41c9 100644 --- a/src/Forms/CompositeValidator.php +++ b/src/Forms/CompositeValidator.php @@ -12,20 +12,21 @@ use SilverStripe\ORM\ValidationResult; * Once each Validator has generated its ValidationResult, the CompositeValidator will combine these results into a * single ValidationResult. This single ValidationResult is what will be returned by the CompositeValidator. * - * You can add Validators to the CompositeValidator in any DataObject by extending the getCompositeValidator() method: + * You can add Validators to the CompositeValidator in any DataObject by extending the getCMSCompositeValidator() + * method: * - * public function getCompositeValidator(): CompositeValidator + * public function getCMSCompositeValidator(): CompositeValidator * { - * $compositeValidator = parent::getCompositeValidator(); + * $compositeValidator = parent::getCMSCompositeValidator(); * * $compositeValidator->addValidator(RequiredFields::create(['MyRequiredField'])); * * return $compositeValidator * } * - * Or by implementing the updateCompositeValidator() method in a DataExtension: + * Or by implementing the updateCMSCompositeValidator() method in a DataExtension: * - * public function updateCompositeValidator(CompositeValidator $compositeValidator): void + * public function updateCMSCompositeValidator(CompositeValidator $compositeValidator): void * { * $compositeValidator->addValidator(RequiredFields::create(['AdditionalContent'])); * } @@ -221,7 +222,7 @@ class CompositeValidator extends Validator } /** - * @internal This method may be updated to public in the future. Let us know if you feel there is a use case for it. + * @internal This method may be updated to public in the future. Let us know if you feel there's a use case for it * @param int $key * @return CompositeValidator */ diff --git a/src/Forms/DefaultFormFactory.php b/src/Forms/DefaultFormFactory.php index 9eea865ee..669f1cdeb 100644 --- a/src/Forms/DefaultFormFactory.php +++ b/src/Forms/DefaultFormFactory.php @@ -101,7 +101,7 @@ class DefaultFormFactory implements FormFactory return null; } - $compositeValidator = $context['Record']->getCompositeValidator(); + $compositeValidator = $context['Record']->getCMSCompositeValidator(); // Extend validator - legacy support, will be removed in 5.0.0 foreach ($compositeValidator->getValidators() as $validator) { @@ -109,7 +109,7 @@ class DefaultFormFactory implements FormFactory } // Extend validator - forward support, will be supported beyond 5.0.0 - $this->invokeWithExtensions('updateCompositeValidator', $compositeValidator); + $this->invokeWithExtensions('updateCMSCompositeValidator', $compositeValidator); return $compositeValidator; } diff --git a/src/Forms/GridField/GridFieldDetailForm.php b/src/Forms/GridField/GridFieldDetailForm.php index 4e1a401bb..f9a76d209 100644 --- a/src/Forms/GridField/GridFieldDetailForm.php +++ b/src/Forms/GridField/GridFieldDetailForm.php @@ -123,7 +123,7 @@ class GridFieldDetailForm implements GridField_URLHandler // if no validator has been set on the GridField then use the Validators from the record. if (!$this->getValidator()) { - $this->setValidator($record->getCompositeValidator()); + $this->setValidator($record->getCMSCompositeValidator()); } return $handler->handleRequest($request); diff --git a/src/ORM/DataExtension.php b/src/ORM/DataExtension.php index 3d29e7ea7..9617dced2 100644 --- a/src/ORM/DataExtension.php +++ b/src/ORM/DataExtension.php @@ -141,7 +141,7 @@ abstract class DataExtension extends Extension * * @param CompositeValidator $compositeValidator */ - public function updateCompositeValidator(CompositeValidator $compositeValidator): void + public function updateCMSCompositeValidator(CompositeValidator $compositeValidator): void { } diff --git a/src/ORM/DataObject.php b/src/ORM/DataObject.php index 0e7b25d20..3f80a3164 100644 --- a/src/ORM/DataObject.php +++ b/src/ORM/DataObject.php @@ -2449,9 +2449,17 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity } /** + * When extending this class and overriding this method, you will need to instantiate the CompositeValidator by + * calling parent::getCMSCompositeValidator(). This will ensure that the appropriate extension point is also + * invoked. + * + * You can also update the CompositeValidator by creating an Extension and implementing the + * updateCMSCompositeValidator(CompositeValidator $compositeValidator) method. + * + * @see CompositeValidator for examples of implementation * @return CompositeValidator */ - public function getCompositeValidator(): CompositeValidator + public function getCMSCompositeValidator(): CompositeValidator { $compositeValidator = new CompositeValidator(); @@ -2459,14 +2467,14 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity if ($this->hasMethod('getCMSValidator')) { Deprecation::notice( '4.6', - 'getCMSValidator() is removed in 5.0 in favour of getCompositeValidator()' + 'getCMSValidator() is removed in 5.0 in favour of getCMSCompositeValidator()' ); $compositeValidator->addValidator($this->getCMSValidator()); } // Extend validator - forward support, will be supported beyond 5.0.0 - $this->invokeWithExtensions('updateCompositeValidator', $compositeValidator); + $this->invokeWithExtensions('updateCMSCompositeValidator', $compositeValidator); return $compositeValidator; } diff --git a/tests/php/Forms/CompositeValidatorTest.php b/tests/php/Forms/CompositeValidatorTest.php index 296958ef8..306bd4b78 100644 --- a/tests/php/Forms/CompositeValidatorTest.php +++ b/tests/php/Forms/CompositeValidatorTest.php @@ -191,8 +191,8 @@ class CompositeValidatorTest extends SapphireTest $this->assertFalse($result->isValid()); $this->assertCount(1, $result->getMessages()); - // Make sure it doesn't fail after removing validation AND has no errors (since calling validate should reset - // errors) + // Make sure it doesn't fail after removing validation AND has no errors (since calling validate should + // reset errors) $compositeValidator->removeValidation(); $result = $form->validationResult(); $this->assertTrue($result->isValid());