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

时间:2018-07-22 08:10:02

标签: laravel laravel-5 listener laravel-5.6 laravel-events

在Laravel 5.6中

我有一个名为DocumentSend的事件,

我有很多听众,例如(SendEmailSendNotificationSendSMS

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

如何仅用DocumentSend侦听器调用SendSMS事件,或如何用所有侦听器调用DocumentSend

希望您能用我的话,并告诉我解决该问题的最佳做法。

预先感谢

1 个答案:

答案 0 :(得分:2)

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

但是,没有什么阻止您阻止运行来自侦听器的代码。

例如,您可以触发如下事件:

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的{​​{1}}侦听器中,您可以这样做:

handle

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

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