Событие Laravel 5.0 игнорируется

Я использую Laravel 5.0 (в старом проекте), а обработчик событий игнорируется.

Есть идеи, если я что-то забуду?

Это приложение \ Providers \ EventServiceProvider

protected $listen = [
SupplierCreated::class => [
NotifySupplierCreated::class,
]
];

Это приложение \ События \ SupplierCreated

class SupplierCreated extends Event {

use SerializesModels;

public $userId;

/**
* Create a new event instance.
*
*/
public function __construct()
{
dd('Event'); // This dd() is working! The other one isn't
}

}

Это приложение \ Обработчики \ События \ NotifySupplierCreated

<?php namespace App\Handlers\Events;

use App\Events\SupplierCreated;

class NotifySupplierCreated {

/**
* Create the event handler.
*
* @return void
*/
public function __construct()
{
//
}

/**
* Handle the event.
*
* @param  SupplierCreated  $event
* @return void
*/
public function handle(SupplierCreated $event)
{
dd($event);
}

}

И это мой клиент, вызывающий код

event(new SupplierCreated($supplier));

2

Решение

Я думаю, что вы можете что-то упустить в вашем App \ Providers \ EventServiceProvider

Вам необходимо добавить следующее

 <?php namespace App\Providers;

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

use App\Events\SupplierWasCreated;
use App\Handlers\Events\NotifySupplierCreated;

class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen =
SupplierWasCreated::class => [
NotifySupplierCreated::class,
]
];

/**
* Register any other events for your application.
*
* @param  \Illuminate\Contracts\Events\Dispatcher  $events
* @return void
*/
public function boot(DispatcherContract $events)
{
parent::boot($events);

//
}
}

Как и все остальное, похоже, все должно работать нормально.

Я реализовал это событие, используя ваш код. Единственное, чего мне не хватало, было выше в EventServiceProvider.

<?php

namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class SupplierWasCreated extends Event
{
use SerializesModels;

public $supplier;

/**
* Create a new event instance.
*
* @return void
*/
public function __construct($supplier)
{
$this->supplier = $supplier
}
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn()
{
return [];
}
}

Тогда ваш обработчик

<?php

namespace App\Handlers\Events;

use App\Events\SupplierWasCreated;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class NotifySupplierCreated {

use InteractsWithQueue;

/**
* Create the event handler.
*
* @return void
*/
public function __construct()
{

}

/**
* Handle the event.
*
* @param  SupplierCreated  $event
* @return void
*/
public function handle(SupplierWasCreated $event)
{
dd($event);
}

}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]