2016-10-29 9 views
1

Я не могу получить ни одного из моих обработчиков событий eloquent.saved.События в Ларавеле не стреляют?

Я попытался это:

<?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); 

register в методе AppServiceProvider и вы должны использовать его в boot методы. Когда вы переместите эту строку на boot метод (из того же класса), он будет работать без проблем, и при сохранении компании следует запустить код saved метода CompanyObserver.