29

Laravel には次のようなコールバックがありますか。

afterSave()
beforeSave()
etc

検索しましたが、何も見つかりませんでした。そのようなものがない場合-それを実装する最良の方法は何ですか?

ありがとう!

4

7 に答える 7

71

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();
于 2012-11-22T19:05:48.737 に答える
28

Laravel 4 の例を追加します。

class Page extends Eloquent {

    public static function boot()
    {
        parent::boot();

        static::creating(function($page)
        {
            // do stuff
        });

        static::updating(function($page)
        {
            // do stuff
        });
    }

}
于 2013-08-08T10:06:14.473 に答える
6

この質問はすでに「承認済み」とマークされていますが、Laravel 4 の新しい更新された回答を追加しています。

Laravel 4 の Beta 4 では、Eloquent 保存イベントのフック イベントが導入されたばかりなので、コアを拡張する必要はもうありません。

Eloquent 保存イベントにフックするための Model::creating(Closure) および Model::updating(Closure) メソッドを追加しました。最終的にこれを行うように圧力をかけてくれた Phil Sturgeon に感謝します... :)

于 2013-02-14T14:14:05.427 に答える
0

モデル自体を制御したい場合は、保存機能をオーバーライドして、コードを の前または後に置くことができます__parent::save()

それ以外の場合は、各 Eloquent モデルが自身を保存する前にイベントが発生します。

Eloquent がモデルを保存するときに発生する 2 つのイベントもあります。

「雄弁.保存: モデル名」または「雄弁.保存: モデル名」。

http://laravel.com/docs/events#listening-to-events

于 2012-11-22T19:07:13.137 に答える