2016-10-29 7 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

オブザーバーの方法に行きましょう。問題は、あなたが使用していることである:AppServiceProvider

Company::observe(CompanyObserver::class); 

registerでの方法、あなたはboot方法でそれを使用する必要があります。この行をboot(同クラスの)メソッドに移動すると、問題なく動作します。savedメソッドCompanyObserverのコードを実行する必要があります。

関連する問題