Validation 银线3.1;在dataobject中使用getCMSValidator进行多个验证

Validation 银线3.1;在dataobject中使用getCMSValidator进行多个验证,validation,content-management-system,backend,silverstripe,Validation,Content Management System,Backend,Silverstripe,我正在尝试在插入数据库之前验证dataobject。我正在使用函数getCMSValidator()来实现这一点。由于只有一个验证器可用(RequiredValidator),我自己制作了一个扩展验证器,用于检查字段值在数据库中是否唯一 function getCMSValidator() { return new UniqueValidator("DBTable",array('Field1','Field2')); } 这是有效的。但是现在我发现我自己的位置,我必须做多个验证,例如

我正在尝试在插入数据库之前验证dataobject。我正在使用函数getCMSValidator()来实现这一点。由于只有一个验证器可用(RequiredValidator),我自己制作了一个扩展验证器,用于检查字段值在数据库中是否唯一

function getCMSValidator() {
    return new UniqueValidator("DBTable",array('Field1','Field2'));
}
这是有效的。但是现在我发现我自己的位置,我必须做多个验证,例如UniqueValidator和RequiredValidator


我应该如何处理这个问题?最好不创建新的验证器?

我以前做过类似的事情,扩展RequiredFields而不是validator。任何扩展验证器的东西都有一个返回布尔值的“php”函数。在这里面,您可以检查必填字段以及您自己的任何进一步验证

class ExampleValidator extends RequiredFields {

    public function __construct() {
        parent::__construct(array('Field1','Field2'));
    }

    public function php($data) {
        $valid = parent::php($data);
        // If $valid is false here you could return immediately 
        // or continue with further validation of your own
        // ...   
        return $valid;
    }

}

是的,我知道。但我不想每次需要验证对象时都创建一个新的验证器。我想编写一个RequiredFields类和一个UniqueFields类,我可以同时使用它们。那么您想执行这两种类型的验证吗?上述方法可以做到这一点,首先完成所需的字段验证,然后继续执行唯一的字段验证。您仍然可以创建UniqueFields验证器,以接受应唯一的字段列表和必需的字段列表,因此您只需要一个验证器。