CMS 中的 Silverstripe 字段验证

Silverstripe fields validation in CMS

注:版本3.1

正在尝试从 CMS 验证此字段的输入:

我什至尝试了一个简单的验证(必需)但不起作用。

public function updateCMSFields(FieldList $fields) {
    $publishDatetimeField = new DatetimeField( 'PublishDate', 'Publish Date'   );
    $expiryDatetimeField = new DatetimeField( 'ExpiryDate', 'Expiry Date' );
    $fields->addFieldToTab('Root.Options', $publishDatetimeField);
    $fields->addFieldToTab('Root.Options', $expiryDatetimeField);
}
public function getCMSValidator(){
    return new RequiredFields('publishDatetimeField');
}

我可以操纵这些值并比较它们,但我无法访问它们。

欢迎任何想法。

您应该能够使用基本验证器检查字段是否为空...但您应该使用字段名称 "PublishDate",而不是 "publishDatetimeField"。

通常这就是在 silverstripe 中完全设置验证的方式...

class MyDataObject extends DataObject {

    static $db = array(
        'MyDateField'       => 'SS_DateTime',
    );

    function getCMSValidator() {
        return new MyDataObject_Validator();
    }
}

class MyDataObject_Validator extends RequiredFields {

    function php($data) {
        $bRet = parent::php($data);

        //do checking here
        if (empty($data['MyDateField']))
            $this->validationError('MyDateField','MyDateField cannot be empty','required');

        return count($this->getErrors());
    }
}

你可以查一下数据是什么...

die(var_dump($data));

这应该是 MYSQL 格式的字符串...例如“2016-03-24 11:41:00”