2016-10-29 102 views
1

我似乎无法让我的任何eloquent.saved事件处理程序运行。Laravel事件没有解雇?

我尝试这样做:

<?php 

namespace App\Providers; 

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

class EventServiceProvider extends ServiceProvider 
{ 
    protected $listen = [ 
     'eloquent.saved: \App\Models\Company' => [ 
      '\App\Models\[email protected]', 
     ], 
    ]; 

} 

,然后添加这个方法来\App\Models\Company

public function hasSaved() { 
    die("SAVED!!!"); 
} 

但是,当我为公司节省不运行。

我试图创建一个观察者:

<?php 

namespace App\Providers; 

use App\Models\Company; 
use App\Observers\CompanyObserver; 
use DB; 
use Illuminate\Support\ServiceProvider; 

class AppServiceProvider extends ServiceProvider 
{ 

    public function register() 
    { 
     Company::observe(CompanyObserver::class); 
    } 
} 

但事件从未火灾:

<?php namespace App\Observers; 

class CompanyObserver { 

    public function saved() { 
     die('saved'); 
    } 

    public function saving() { 
     die('saving'); 
    } 
} 

我试图用一个监听器类中EventServiceProvider代替:

protected $listen = [ 
    'eloquent.saved: \App\Models\Company' => [ 
     \App\Listeners\CompanySavedListener::class, 
    ], 
]; 

但也从未运行。

最后,我尝试添加这EventServiceProvider

public function boot(DispatcherContract $events) 
{ 
    parent::boot($events); 

    $events->listen('eloquent.*', function() { 
     dump(func_get_args()); 
    }); 
} 

这确实火了一堆随机事件,但它只是喂我的模型实例 - 我不知道是什么事件实际上是射击。

那么这是怎么回事?我只想知道我的Company何时已经保存。

回答

2

让我们去观察者的方式。问题是,你使用:

Company::observe(CompanyObserver::class); 

registerAppServiceProvider方法,你应该在boot方法使用它。当您将此行移动到boot方法(同一类)时,它将毫无问题地工作,并且当您保存公司时,应该启动saved方法CompanyObserver的代码。