オブザーバ:あなた自身での作成
完全なクラス名 (名前空間を含む) をモデルのオブザーバ・プロパティに加えることで、オブザーバとして任意のクラスを 追加することができます。オブザーバとして利用できるクラスを作成するには 2 つの方法があります:
Orm\Observer クラスを拡張
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 と before_update は引き起こされます。イベントをオブジェクトが変更されていない場合でも引き起こす必要がある場合 (例: $_FILES のデータを処理するため) 、あなたは before_save を利用する必要があります。