观察者:建立你自己的
你可以添加任何类别做为一个观察者,藉由添加完整的类别名称(包含命名空间)到你的模型的 Observers 特性。 有两种方式建立的类别可以用来做为观察者:
扩充 Orm\Observer 类别
建立一个扩充 Orm\Observer 的新类别,并为你想要你的观察者行动的事件上建立方法。 在下面的範例中,你想要它在 after_insert上行动, 该方法动作时将被传递 Model 实例。
class Observer_Something extends Orm\Observer
{
public function after_insert(Orm\Model $model)
{
\Log::info('Succesfully created new object of class '.get_class($model));
}
}
Orm\Observer 扩充的类型预设是独体的,如此你不能使用一个 instance() 方法或一个 $_instance 特性,否则无法正常运作, 因为此方法可能是静态或非静态。
带有一个 orm_notify() 方法
当你扩充 Orm\Observer 类别它继承一个 orm_notify() 方法, 该方法将确认是否有符合事件的方法,并在可能时呼叫它。 但你可以使用任何类别做为一个观察者只要它有一个 orm_notify() 方法, 该方法将于事件被呼叫且被传递事件名称和一个 Model 实例。
class Some_Other_Class
{
// 在 orm_notify 方法之前或之后可能有许多方法及特性
public static function orm_notify(Orm\Model $model, $event)
{
\Log::info('I was notified of the event '.$event.' on a Model of class '.get_class($model));
}
}
事件名称
- after_create,一旦物件被建立时,由 __construct() 方法呼叫
- after_load,一旦物件从资料库被载入时,由 __construct() 方法呼叫
- before_save,在任何事完成之前,由 save() 方法呼叫
- after_save,在完成后由 save() 方法呼叫
- before_insert,当一个物件第一次被储存到资料库时被呼叫
- after_insert,当一个物件第一次被储存到资料库后被呼叫
- before_update,当一个物件被储存到资料库时被呼叫(第一次除外)
- after_update,当一个物件被储存到资料库后被呼叫(第一次除外)
- before_delete,当你从资料库删除一个物件时被呼叫
- after_delete,当你从资料库删除一个物件后被呼叫
- after_clone,在一个物件成功被複製之后被呼叫
before_insert 和 before_update 只在该物件被变更时触发。如果你需要触发一个事件即使该物件没有被变更(例如:要处理 $_FILES 资料),你应该使用 before_save。