Laravel の Model Event
[FuelPHPのORMでinsert前とかをフックして何か処理をする (´・ω・`) - 杏z 学習帳
を見て、Laravel の Model Event
を思い出したので書いておきます。
上記みたいに Model
をあれやこれやする前後に処理をはさみたい! ということがあると思います。Laravel には Model Event
という仕組みが用意されていて楽に書くことができます。
書き方
インサートする前にログを出力したい場合です。
<?php class Sample extends Eloquent { // boot をオーバーライド protected static function boot() { parent::boot(); // インサート前なので creating メソッドを定義 self::creating(function($ribbit) { Log::info('保存するよ'); }); } }
Model Event
は、Event
クラスの仕組みが使われており、Model
周りはかなり細かくイベントが定義されています。
定義されている Mode Event
- creating
- インサート前
- created
- インサート後
- updating
- アップデート前
- updated
- アップデート後
- saving
- インサート前及びアップデート前
- saved
- インサート後及びアップデート後
- deleting
- デリート前
- deleted
- デリート後
- restoring
- ソフトデリート復帰前
- restored
- ソフトデリート復帰後
Model Observer
FuelPHP のように Model Observer
を作成することもできます。
まず、Observer
を用意して…。
<?php class SampleObserver { public function creating($model) { if (条件) { // return false するとインサートは行われません return false; } } }
Observer
を定義します。
<?php Sample::observe(new SampleObserver);
で OK です。