Обработчик событий Laravel 5 не стреляет

Поэтому я тестирую новую методологию Laravel 5 Event.

В моем репозитории я увольняю мероприятие «KitchenStored» так:

// Events use App\Events\KitchenStored; class EloquentKitchen implements KitchenInterface { public function store($input) { $kitchen = new $this->kitchen; $kitchen->name = $input['name']; $kitchen->save(); \Event::fire(new KitchenStored($kitchen)); return $kitchen; } 

Что успешно запускает это событие:

 <?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; class KitchenStored extends Event { use SerializesModels; /** * Create a new event instance. * * @return void */ public function __construct($kitchen) { $this->kitchen = $kitchen; } } 

Однако он не связан с этим обработчиком:

 <?php namespace App\Handlers\Events; use App\Events\KitchenStored; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldBeQueued; class AttachCurrentUserToKitchen { /** * Create the event handler. * * @return void */ public function __construct() { dd('handler'); } /** * Handle the event. * * @param KitchenStored $event * @return void */ public function handle(KitchenStored $event) { // } } 

который я знаю, потому что dd («обработчик»); не запускается во время жизненного цикла запроса.

Я зарегистрировал событие с его слушателем здесь:

 <?php namespace App\Providers; use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider { /** * The event handler mappings for the application. * * @var array */ protected $listen = [ App\Events\KitchenStored::class => [ App\Handlers\Events\AttachCurrentUserToKitchen::class ] ]; /** * Register any other events for your application. * * @param \Illuminate\Contracts\Events\Dispatcher $events * @return void */ public function boot(DispatcherContract $events) { parent::boot($events); Event::listen('App\Events\KitchenStored', 'App\Handlers\Events\AttachCurrentUserToKitchen'); } } 

Может ли кто-нибудь объяснить этот процесс лучше, чтобы я мог продолжать работу с самым чистым кодом, который у меня есть на сегодняшний день?

Большое спасибо

В EventServiceProvider.php ведущую \ при ссылке на класс с использованием нотации ::class :

 protected $listener = [ \App\Events\KitchenStored::class => [ \App\Handlers\Events\AttachCurrentUserToKitchen::class, ], ]; 

Вы также можете добавить операторы use и коротко ограничить отображение ваших слушателей:

 use App\Events\KitchenStored; use App\Handlers\Events\AttachCurrentUserToKitchen; ... protected $listener = [ KitchenStored::class => [ AttachCurrentUserToKitchen:class, ], ]; 

Или просто используйте строковое обозначение:

 protected $listener = [ 'App\Events\KitchenStored' => [ 'App\Handlers\Events\AttachCurrentUserToKitchen', ], ]; 

Если вы запустите php artisan optimize , ваши обработчики событий должны начать прослушивание.

Поблагодарите малтустаффа из ларачатного канала для этого.

Я побежал

 composer dumpautoload 

с последующим

 php artisan clear-compiled 

Затем мои события начали стрелять.

У меня была аналогичная проблема, и я исправил ее, удалив файл vendor \ compiled.php. Затем я снова запускаю «композиторное обновление», и теперь обработчик запускается, как ожидалось.