在Laravel中创建,更新或删除任何模型后执行操作

时间:2015-02-19 23:42:34

标签: laravel

每次在我的应用程序中创建,更新或删除任何模型时,我都想执行一个函数。

例如,我想将模型名称及其记录数据打印到我的日志中。

我该怎么做?我一直在寻找一些课程来延伸,但没有运气。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

回答您对Robok的回答的评论,您可以BaseObserver

例如,这是我使用的那个:

<?php namespace App\Observers;

use Illuminate\Database\Eloquent\Model as Eloquent;

class BaseObserver {

    public function saving(Eloquent $model) {}

    public function saved(Eloquent $model) {}

    public function updating(Eloquent $model) {}

    public function updated(Eloquent $model) {}

    public function creating(Eloquent $model) {}

    public function created(Eloquent $model) {}

    public function deleting(Eloquent $model) {}

    public function deleted(Eloquent $model) {}

    public function restoring(Eloquent $model) {}

    public function restored(Eloquent $model) {}
}

现在任何模型观察者都可以扩展它:

<?php namespace App\Observers;

use App\Observers\BaseObserver;

class ProductObserver extends BaseObserver {

    public function creating(Eloquent $model)
    {
        $model->author_id = Sentry::getUser()->id;
    }

    public function created(Eloquent $model)
    {
        if(Input::hasFile('logo')) Image::make(Input::file('logo')->getRealPath())->save(public_path() ."/gfx/product/logo_{$model->id}.png");
    }

    public function updating(Eloquent $model)
    {
        $model->author_id = Sentry::getUser()->id;
    }

    public function updated(Eloquent $model)
    {
        if(Input::has('payment_types')) $model->paymentTypes()->attach(Input::get('payment_types'));

        //Upload logo
        $this->created($model);
    }
}

如果你想在每个观察者中都有$model->author_id = Sentry::getUser()->id这样的东西,你当然可以在BaseObserver中应用它。