我想审计跟踪对数据对象所做的所有更改。假设我有事件数据对象,我想知道谁更改了它,何时更改,更改了什么等(类似于页面)。Silverstripe 网站建议使用 Verioned,但我找不到任何实施示例。它说最好的例子是Pages,它已经实现了Versioned。基本规则是在你的装饰器上定义一个 augmentDatabase() 方法。因此,我想将 DataExtention 用于数据对象(扩展),然后将扩展的用于我的 Event 数据对象。但是有什么简单的例子吗?
2 回答
假设您要管理和监视事件 DataObject 的多个版本,您只需声明要使用 thatDataObject 的版本化扩展
Class Event extends DataObject{
static $extensions = array(
"Versioned('Stage', 'Live')"
);
...
}
然后运行 dev/build 现在应该有一个 Event、Event_Live 和 Event_versions 表。然后,您可以查看 Versioned.php 中可用的方法,并将它们与 Event 一起使用,即 publish()。这应该让你开始。
"Versioning in SilverStripe is handled through the Versioned class. It's a DataExtension, which allow it to be applied to any DataObject subclass."
"Similarly, any subclass you create on top of a versioned base will trigger the creation of additional tables, which are automatically joined as required."
Here is link to read further with examples Versioning of Database Content