silverstripe覆盖dataobject的功能

时间:2014-04-25 10:42:24

标签: silverstripe

我想扩展我使用的模块(UserDefinedForms)的DataObject(EditableDateField)。在那里我想覆盖某个方法(getFormField)。我试图用DataExtension扩展。但它不起作用。

这里的代码......

的config.php

EditableDateField::add_extension("CustomEditableDateField");

CustomEditableDateField

class CustomEditableDateField extends DataExtension {
    public function getFormField() {
        //test is function called
        echo 'test';
        exit();
    }
} 

此外,我尝试在配置中使用Object :: useCustomClass将整个EditableDateField替换为我的CustomClass,但也没有成功。

最好的方法是什么?

很多人, 弗洛里安

1 个答案:

答案 0 :(得分:1)

要做你想要实现的目标,你不需要扩展EditableDateField

您正在寻找的是EditableDateField_FormField,它扩展了DateFieldDateField负责生成HTML并进行验证等。DateField确实有一个名为default_config which looks like this:的静态变量

static $default_config = array(
    'showcalendar' => false,
    'jslocale' => null,
    'dmyfields' => false,
    'dmyseparator' => '&nbsp;<span class="separator">/</span>&nbsp;',
    'dmyplaceholders' => true,
    'dateformat' => null,
    'datavalueformat' => 'yyyy-MM-dd',
    'min' => null,
    'max' => null,
);

使用Silverstripe中的配置系统,您可以使用以下命令将默认dateformat更改为dd.MM.yyyy格式:

EditableDateField_FormField:
  default_config:
    'dateformat': 'dd.MM.yyyy'

您需要像上面的示例一样使用EditableDateField_FormField,而不是更改default_config本身的DateField,否则您可能会在CMS中遇到问题。

技术说明

这适用于the constructor of DateField setting the instance config to the value of the default_config

由于dateformat中的NULL值通常为default_configan if-statement passes会导致dateformat设置i18n::get_date_format()的结果。