Yii中Model / ActiveRecord的“加载后”事件

时间:2013-01-11 21:41:17

标签: yii

当从DB加载记录并且模型对象(通常是CActiveRecord后代)用适当的数据填充时,我找不到拦截事件的方法 - 这与{{1}相似}。 documentation列出以下事件:onAfterSaveonAfterConstructonAfterDeleteonAfterFindonAfterSaveonAfterValidateonBeforeDeleteonBeforeFindonBeforeSaveonBeforeValidate

唯一可能相关的是onUnsafeAttribute,所以我在从onAfterConstruct派生的模型类中实现了事件处理程序,但它没有被调用。

更新

除了接受的答案之外,我还发现有一种受保护的方法instantiate,其用途与目的相同。可以重写它以访问新实例的属性。最重要的是,在记录的任何实例化之后调用它,不仅在CActiveRecord之后,所以它似乎更可靠。

2 个答案:

答案 0 :(得分:5)

我认为你要找的是onAfterFind(),onAfterFind()是在实例化记录之后引发的,vs onAfterConstruct()是在 new 运营商

答案 1 :(得分:0)

在CActiveRecord.php中你也有 function populateRecord($ attributes,$ 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”之后(谷歌请索引这个)