2013-02-21 45 views
1

我想審計跟蹤對數據對象所做的所有更改。假設我有事件數據對象,並且我想知道誰更改了它,更改了什麼,更改了什麼等(與頁面類似)。 Silverstripe網站建議使用Verioned,但我找不到任何實施示例。它說最好的例子是Pages已經有了Versioned實現。基本規則是在裝飾器上定義一個augmentDatabase()方法。 因此,我想爲DataObject(擴展名)使用DataExtention,然後將擴展的DataObject用於我的Event數據對象。但是有沒有簡單的例子?Silverstripe針對新版本中的數據對象的版本化功能(3.2)

回答

3

假設你要管理和監控事件數據對象的多個版本,你只需要聲明的是,你要使用的版本擴展thatDataObject

Class Event extends DataObject{ 
    static $extensions = array(
    "Versioned('Stage', 'Live')" 
); 
    ... 
} 

然後運行一個開發/建築 您現在應該有一個Event,Event_Live和Event_versions表。 然後,您可以查看Versioned.php中可用的方法,並將它們與Event一起使用,即publish()。這應該讓你開始。

+1

所以,我明白,你不能改變事件對象本身(也許因爲它來自第三方擴展)進一步閱讀。我以爲你在編寫Event DataObject。在這種情況下,你可以嘗試用Object :: add_extension('Event','Versioned(「Stage」,「Live」)')來裝飾Versioned的事件。在mysite/_config.php中。這將通過已經實現的augmentDatabase()方法來處理版本控制方面。如果您需要添加更多自定義邏輯,您可以創建自己的裝飾器,並使用相同的機制添加它。希望這可以幫助 – jfbarrois 2013-02-21 01:11:36

2

「SilverStripe中的版本控制是通過Versioned類來處理的,它是一個DataExtension,它允許將它應用於任何DataObject子類。」 「

」同樣,您在版本化基礎之上創建的任何子類都會觸發創建附加表格,這些表格會根據需要自動連接。

這裏是鏈接到與實例 Versioning of Database Content