Laravel には次のようなコールバックがありますか。
afterSave()
beforeSave()
etc
検索しましたが、何も見つかりませんでした。そのようなものがない場合-それを実装する最良の方法は何ですか?
ありがとう!
save()
関数を拡張するためにコールバックを保存する前後に達成するための最良の方法。
ここに簡単な例があります
class Page extends Eloquent {
public function save(array $options = [])
{
// before save code
parent::save($options);
// after save code
}
}
したがって、 Page オブジェクトを保存すると、関数save()
を含むその関数が呼び出されparent::save()
ます。
$page = new Page;
$page->title = 'My Title';
$page->save();
Laravel 4 の例を追加します。
class Page extends Eloquent {
public static function boot()
{
parent::boot();
static::creating(function($page)
{
// do stuff
});
static::updating(function($page)
{
// do stuff
});
}
}
この質問はすでに「承認済み」とマークされていますが、Laravel 4 の新しい更新された回答を追加しています。
Laravel 4 の Beta 4 では、Eloquent 保存イベントのフック イベントが導入されたばかりなので、コアを拡張する必要はもうありません。
Eloquent 保存イベントにフックするための Model::creating(Closure) および Model::updating(Closure) メソッドを追加しました。最終的にこれを行うように圧力をかけてくれた Phil Sturgeon に感謝します... :)
モデル自体を制御したい場合は、保存機能をオーバーライドして、コードを の前または後に置くことができます__parent::save()
。
それ以外の場合は、各 Eloquent モデルが自身を保存する前にイベントが発生します。
Eloquent がモデルを保存するときに発生する 2 つのイベントもあります。
「雄弁.保存: モデル名」または「雄弁.保存: モデル名」。