diff --git a/src/Security/Member.php b/src/Security/Member.php index 2003e8f05cd..6d9889989d6 100644 --- a/src/Security/Member.php +++ b/src/Security/Member.php @@ -15,6 +15,7 @@ use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\TestMailer; use SilverStripe\Forms\CheckboxField; +use SilverStripe\Forms\CompositeValidator; use SilverStripe\Forms\ConfirmedPasswordField; use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\FieldList; @@ -696,6 +697,20 @@ public function getValidator() return $validator; } + public function getCMSCompositeValidator(): CompositeValidator + { + // Add the member validator before extension point, so it's much easier to customise this + // via an extension + $this->beforeExtending( + 'updateCMSCompositeValidator', + function (CompositeValidator $compositeValidator): void { + $memberValidator = $this->getValidator(); + $compositeValidator->addValidator($memberValidator); + } + ); + + return parent::getCMSCompositeValidator(); + } /** * Temporarily act as the specified user, limited to a $callback, but diff --git a/tests/php/Core/Validation/MemberValidatorTest.php b/tests/php/Core/Validation/MemberValidatorTest.php new file mode 100644 index 00000000000..f5e34506176 --- /dev/null +++ b/tests/php/Core/Validation/MemberValidatorTest.php @@ -0,0 +1,21 @@ +getCMSCompositeValidator(); + + $memberValidators = $compositeValidator->getValidatorsByType(Member_Validator::class); + $this->assertCount(1, $memberValidators, 'We expect exactly one member validator'); + } +}