觀察者:建立你自己的
你可以添加任何类別做为一个觀察者,藉由添加完整的类別名稱(包含命名空間)到你的模型的 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。