【发布时间】:2014-04-25 10:42:23
【问题描述】:
我想扩展我使用的模块 (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,但也没有成功。
最好的方法是什么?
多谢, 弗洛里安
【问题讨论】:
-
通过覆盖
getFormField你想做什么?可能是您可以使用的另一个函数并具有extend回调? -
我想这样做并在多语言网站中始终强制使用相同的日期格式: public function getFormField() { $defaultValue = ($this->getSetting('DefaultToToday')) ?日期('Y-m-d'):$this->默认值; $field = new DateField($this->Name, $this->Title, $defaultValue); $field->setConfig('showcalendar', true); $field->setConfig('dateformat', 'dd.MM.yyyy'); return $field; }
-
不是 100% 确定,但只是为了设置日期格式,您不能在扩展程序上使用 onBeforeRender 回调吗?
-
谢谢。基本问题是扩展中的函数没有被调用。如果我再次阅读 DataExtension 的文档,我想知道是否真的可以覆盖现有方法。
-
我不认为你可以覆盖任何你想要的东西,DataExtension 在原始类上有由 extend() 调用的特殊钩子,在 FormFields 上 onBeforeRender 是唯一调用扩展的钩子。如果你想覆盖任何函数,你必须创建一个扩展 EditableDateField 的自定义类。
标签: silverstripe