2013-01-11 30 views
0

我不能找到一個辦法攔截與適當的數據填充時,記錄從數據庫加載事件和模型對象(通常CActiveRecord後裔) - 這是相當於onAfterSave。該documentation列出了以下事件:onAfterConstructonAfterDeleteonAfterFindonAfterSaveonAfterValidateonBeforeDeleteonBeforeFindonBeforeSaveonBeforeValidateonUnsafeAttribute「後加載」 Yii的事件模型/ ActiveRecord的

唯一可能相關的是onAfterConstruct,所以我在我的模型類中實現了事件處理函數,派生自CActiveRecord,但它沒有被調用。

UPDATE:

除了接受的答案,我發現有一個受保護的方法instantiate,其意在同樣的目的。它可以被覆蓋以訪問新實例的屬性。最重要的是,它是記錄的任何實例化後調用,不僅find之後,所以它似乎更可靠。

回答

5

我想你要找的是什麼onAfterFind(),onAfterFind備案後提出()被實例化,VS onAfterConstruct()運營商創建的模型實例之後引發

+0

謝謝,它的工作原理。我發現了另一種方法 - 「實例化」,所以我會更新我的問題。 – Stan

0

在CActiveRecord.php還有 功能populateRecord($屬性,$ callAfterFind = TRUE) 它做了:

//instantiate: by default only returns a new empty object of this class 
$record = instantiate() 

//then fill all the record attributes 
... 

//call afterfind 
if($callAfterFind) $record->afterFind(); 

這意味着每一條記錄被加載時,一個afterFind被調用。 我沒有找到其他地方的記錄值得到填充,所以它似乎afterFind可以解釋爲加載後/「afterLoad」(谷歌請索引本)

+0

的谷歌已經聽說你 – commonpike