2015-05-19 5 views
6

Я немного смущен по-разному между События и Слушатели.Laravel 5 - Путаница между обработчиками событий и прослушивателями

Я понял, как вы можете создавать свои события под Events, а затем зарегистрировать их и реализовать обработчики в Handlers\Events. Итак, здесь у меня есть события и обработка событий.

Они работают после того, как я определяю их в Providers\EventServiceProvider.php

protected $listen = [ 
    UserHasSignedUp::class => [ 
     SendWelcomeEmail::class, 
     SendAdminEmail::class 
    ] 
]; 

Так что же Слушатели?

Для меня они кажутся точно такими же, как Обработчики событий?

ответ

14

В вашем примере UserHasSignedUp является Event. SendWelcomeEmail и SendAdminEmail - это два слушателя, ожидающих, что событие UserHasSignedUp будет запущено, и они должны реализовать требуемую бизнес-логику по методу handle каждого из них.

Супер простой пример:

Где-то в UserController

Event::fire(new UserHasSignedUp($user)); //UserHasSignedUp is the event being fired 

SendWelcomeEmail класс

class SendWelcomeEmail //this is the listener class 
{ 
    public function handle(UserHasSignedUp $event) //this is the "handler method" 
    { 
     //send an email 
    } 
} 

Как вы можете видеть, каждое событие может иметь несколько слушателей, но слушатель не может слушать более чем одно событие. Если вы хотите прослушивать множество мероприятий, вы должны взглянуть на Event Subscribers

Надеюсь, что это поможет.

+0

А я думаю, что смутил себя, потому что создал папку «Слушатели», но на самом деле это не часть Laravel 5, поэтому я не понимал разницы между/Handlers/Events и/Listeners – user391986

+0

ah i see! надеюсь, что мой ответ помог =) –

+0

Привет, Ezequiel, еще один вопрос, который я немного смутил, когда увидел видео от Laracon (октябрь 2014 года), где они используют метод event -> raise и event-> release, это все еще так сделать это, или это было изменено с тех пор? https://youtu.be/2_380DKU93U?t=2034 – user391986

0

Здесь не так много информации об этом, поэтому это может быть просто спекуляцией. Я взглянул на this video и увидел, что вы можете использовать обработчики с командами. Я думаю, что если вы используете команды, имеет смысл иметь все ваши обработчики в одном месте. Однако, если вы этого не сделаете, то с App\Handlers\Events\Whatever может быть не так желательно, как App\Listeners\Whatever.

0

Слушателей против обработчиков:

слушатель listen для конкретного события уволят. xxxxCreatedListener будет слушать только xxxx

Обработчик может обрабатывать несколько событий, которые должны быть запущены. Например, предположим, что вы используете выполнение CRUD-операций, ваш обработчик может дождаться xxxxCreatedEvent, xxxxDeletedEvent, xxxxUpdatedEvent.

Смежные вопросы