2016-10-29 2 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); 
    } 
} 

그러나 사건 결코 화재 : 내가 대신 EventServiceProvider에 리스너 클래스를 사용하여 시도

<?php namespace App\Observers; 

class CompanyObserver { 

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

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

:

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에서 시작해야합니다.