我应该在哪里将模型保存事件监听器放在laravel 5.1中

时间:2015-07-09 09:10:07

标签: php laravel eloquent laravel-5.1

Laravel文档说我应该将模型事件放在EventServiceProvider boot()方法中。

public function boot(DispatcherContract $events)
{

    Raisefund::saved(function ($project) {
        //do something
    });

}

但我有很多我想听的模特 所以我想知道是否将它全部放在EventServiceProvider中是正确的方法。

2 个答案:

答案 0 :(得分:11)

您可以在模型启动方法中注册监听器回调,例如:

class User extends Eloquent {
  protected static function boot() {
    parent::boot();

    static::deleting(function ($user) {
      // deleting listener logic
    });

    static::saving(function ($user) {
      // saving listener logic
    });
  }
}

答案 1 :(得分:11)

是的,这是正确的,EventServiceProvider是最适合它的地方。

但是,您可以创建观察者以保持其清洁。我会举一个简单的例子。

<强> EventServiceProvider

<?php 

namespace App\Providers;

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

use App\Models\Users;
use App\Observers\UserObserver;

/**
 * Event service provider class
 */
class EventServiceProvider extends ServiceProvider
{
    /**
     * Boot function
     *
     * @param DispatcherContract $events
     */
    public function boot(DispatcherContract $events)
    {
        parent::boot($events);

        Users::observe(new UserObserver());
    }
}

<强> UserObserver

<?php

namespace App\Observers;

/**
 * Observes the Users model
 */
class UserObserver 
{
    /**
     * Function will be triggerd when a user is updated
     * 
     * @param Users $model
     */
    public function updated($model)
    {
    }
}

Observer将成为执行savedupdatedcreated等功能的地方。
有关观察员的更多信息:http://laravel.com/docs/5.0/eloquent#model-observers