2016-10-29 106 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的代碼。