Laravel文档说我应该将模型事件放在EventServiceProvider boot()
方法中。
public function boot(DispatcherContract $events)
{
Raisefund::saved(function ($project) {
//do something
});
}
但我有很多我想听的模特
所以我想知道是否将它全部放在EventServiceProvider
中是正确的方法。
答案 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
将成为执行saved
,updated
,created
等功能的地方。
有关观察员的更多信息:http://laravel.com/docs/5.0/eloquent#model-observers