Почему слушатель событий не запускается в Lumen? - PullRequest
0 голосов
/ 09 октября 2019

Итак, у меня определены классы событий и слушателей, а также они зарегистрированы в массиве $ listen в EventServiceProvider.php. Вот код:

use App\Events\EpisodeCreated;
use App\Listeners\NewEpisodeListener;

use Event;
class EventServiceProvider extends ServiceProvider {
    protected $listen = [
        EpisodeCreated::class => [
            NewEpisodeListener::class
        ]
    ];
}

, а затем в методе загрузки EventServiceProvider у меня есть следующее:

public function boot() {
    Episode::created(function($episode) {
        Event::fire(new EpisodeCreated($episode));
    });
}

вот класс событий EpisodeCreated:

namespace App\Events;

use App\Models\Episode;

class EpisodeCreated extends Event {
    public $episode;

    public function __construct(Episode $episode) {
        $this->episode = $episode;
    }
}

и, наконец, слушатель:

namespace App\Listeners;

use App\Events\EpisodeCreated;
use App\Facades\EventHandler;
use App\Http\Resources\ShowResource;

class NewEpisodeListener {

    public function __construct() {

    }

    public function handle(EpisodeCreated $event) {
        EventHandler::sendNewEpisode((new ShowResource($event->episode->show))->toArray());
    }

}

Наконец, я написал следующий модульный тест, чтобы убедиться, что событие запускается. Похоже, это не так:

public function testNewEpisodeEventFiredOff() {
    Event::fake();

    $show = factory(Show::class)->create();
    $episode = factory(Episode::class)->create(['show_id' => $show->id]);

    Event::assertDispatched(EpisodeCreated::class);
}

Я получаю сообщение об ошибке, говорящее, что событие никогда не отправлялось, когда я запускаю phpunit. Также я добавил операторы echo debug, и пока создается объект EpisodeCreated, NewEpisodeListener не запускается. Ребята, будем рады любой помощи.

1 Ответ

0 голосов
/ 10 октября 2019

Ну, похоже, моя проблема в том, что я определил метод загрузки в EventServiceProvider без вызова parent::boot(). Поскольку я реорганизовал свой код, чтобы вообще не использовать метод загрузки, я удалил его, и теперь он работает лучше.

...