Laravel 5.6 одно событие и множество дополнительных слушателей

в Ларавеле 5.6

У меня есть событие под названием DocumentSend,

И у меня много лайков слушателей (SendEmail, SendNotification, SendSMS),

прослушиватели необязательны (зависит от типа документа и определяется пользователем), теперь вопрос:

Как я могу вызвать, например, событие DocumentSend только с SendSMS слушателем или DocumentSend со всеми слушателями?

Я надеюсь, что вы понимаете, что я имею в виду, и расскажете мне о наилучшей практике для моей проблемы.

заранее спасибо


person Hamed Yarandi    schedule 22.07.2018    source источник
comment
Я уже начал думать об использовании интерфейсов. Я думаю, вы можете создать единый интерфейс, который будет универсальным слушателем, а затем установить свойство в качестве условия для проверки реализации интерфейса, а затем вы можете вручную выполнить их на основе этого свойства. Что вы думаете?   -  person Oluwatobi Samuel Omisakin    schedule 22.07.2018


Ответы (1)


Ну, простые ответы - вы не можете. Когда вы запускаете событие, все зарегистрированные слушатели будут слушать это событие, и все они будут запущены.

Однако ничто не мешает вам предотвратить запуск кода из слушателя.

Например, вы можете запустить событие следующим образом:

event(new DocumentSend($document, true, false, false));

и определите конструктор DocumentSend следующим образом:

public function __construct($document, $sendEmail, $sendNotification, $sendSms)
{
    $this->document = $document;
    $this->sendEmail = $sendEmail;
    $this->sendNotification = $sendNotification;
    $this->sendSms = $sendSms;
}

и теперь в каждом слушателе вы можете просто проверить правильную переменную, поэтому, например, в SendEmail слушателе в handle вы можете сделать это так:

public function handle(DocumentSend $event)
{
   if (!$event->sendSms) {
     return;
   }

  // here your code for sending
}

то же самое вы можете сделать для других слушателей.

Конечно, это всего лишь пример — вам не обязательно использовать 4 переменные. Вы можете установить некоторые свойства в $document только для того, чтобы отметить способ отправки.

person Marcin Nabiałek    schedule 22.07.2018
comment
Спасибо за ответ. А как насчет подписчиков на события? - person Hamed Yarandi; 22.07.2018
comment
Я никогда не использовал их, но, вероятно, вы также не можете принимать решения там, предполагая, что прослушивание связано с документом. Однако в случае, если это зависит от аутентифицированного пользователя, это может быть возможно, но тогда вам нужно попробовать. - person Marcin Nabiałek; 22.07.2018