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

92
9

в Ларавеле 5.6

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

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

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

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

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

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

спросил(а) 2021-01-19T13:47:25+03:00 9 месяцев, 1 неделя назад
1
Решение
79

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

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

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

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 только для того, чтобы отметить, как он должен быть отправлен.

ответил(а) 2021-01-19T13:47:25+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема