オブザーバ:自分の作成
完全なclassname(名前空間を含めて)をモデルのオブザーバ・プロパティに加えることにで、オブザーバとしてあなたはどんなクラスでも 加えることができます。オブザーバとして使われることができるクラスを作成するには2つの方法があります:
Extend the Orm\Observer class
Orm\Observerを展開する新しいクラスを作成して、あなたのオブザーバが行動することを望むイベントのための 方法を作成してください。 下記の例は、それがafter_insertに作用することを望んでいます。 メソッドは、それを実行する対象モデルのインスタンスが渡されます。
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()メソッドを持っているとして、しかし、あなたがいる限りオブザーバーとして任意のクラスを使用することができます。それはイベントで呼び出され、 イベント名とモデルのインスタンスを渡すことができます。
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 and before_update are triggered only if the object has been changed. If you need to trigger an event even if the object has not been changed (ex.: to handle $_FILES datas), you should use before_save.