Laravel 5.6 一个事件和许多可选的侦听器

Laravel 5.6 one event and many optional listeners

在Laravel 5.6

我有一个名为 DocumentSend

的活动

我有很多听众喜欢 (SendEmail, SendNotification, SendSMS),

侦听器是可选的(取决于文档类型并由用户定义), 现在的问题是:

我怎样才能调用 DocumentSend 事件只有 SendSMS 听众或 DocumentSend 所有听众?

希望您能理解我的意思,并告诉我针对我的问题的最佳做法。

提前致谢

好吧,简单的答案是 - 你不能。当您触发事件时,所有已注册的侦听器都将侦听此事件,并且所有侦听器都将启动。

然而,没有什么能阻止您阻止 运行 代码来自侦听器。

例如,您可以像这样触发事件:

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;
}

现在在每个监听器中你可以只验证正确的变量,所以例如在 handle 中的 SendEmail 监听器中你可以这样做:

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

  // here your code for sending
}

您可以为其他听众做类似的事情。

当然这只是示例 - 您不必使用 4 个变量。您可以将某些属性设置为 $document only 以标记应如何发送。