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

Laravel 5.6一个事件和多个可选侦听器,laravel,laravel-5,listener,laravel-5.6,laravel-events,Laravel,Laravel 5,Listener,Laravel 5.6,Laravel Events,在拉威尔5.6 我有一个名为DocumentSend的事件 我有很多听众,比如(sendmail,SendNotification,SendSMS) 侦听器是可选的(取决于文档类型并由用户定义), 现在的问题是: 例如,如何仅使用SendSMS侦听器调用DocumentSend事件,或使用所有侦听器调用DocumentSend事件 我希望你明白我的意思,并告诉我我的问题的最佳做法 提前谢谢好吧,简单的答案是——你不能。当您触发事件时,所有注册的侦听器都将侦听此事件,并且所有侦听器都将启动 然而,

在拉威尔5.6

我有一个名为
DocumentSend
的事件

我有很多听众,比如(
sendmail
SendNotification
SendSMS

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

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

我希望你明白我的意思,并告诉我我的问题的最佳做法


提前谢谢

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

然而,并没有什么可以阻止您从侦听器运行代码

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

event(new DocumentSend($document, true, false, false));
public function __construct($document, $sendEmail, $sendNotification, $sendSms)
{
    $this->document = $document;
    $this->sendEmail = $sendEmail;
    $this->sendNotification = $sendNotification;
    $this->sendSms = $sendSms;
}
public function handle(DocumentSend $event)
{
   if (!$event->sendSms) {
     return;
   }

  // here your code for sending
}
并定义DocumentSend的构造函数,如下所示:

event(new DocumentSend($document, true, false, false));
public function __construct($document, $sendEmail, $sendNotification, $sendSms)
{
    $this->document = $document;
    $this->sendEmail = $sendEmail;
    $this->sendNotification = $sendNotification;
    $this->sendSms = $sendSms;
}
public function handle(DocumentSend $event)
{
   if (!$event->sendSms) {
     return;
   }

  // here your code for sending
}
现在,在每个侦听器中,您只需验证正确的变量,例如在
handle
中的
sendmail
listener中,您可以这样做:

event(new DocumentSend($document, true, false, false));
public function __construct($document, $sendEmail, $sendNotification, $sendSms)
{
    $this->document = $document;
    $this->sendEmail = $sendEmail;
    $this->sendNotification = $sendNotification;
    $this->sendSms = $sendSms;
}
public function handle(DocumentSend $event)
{
   if (!$event->sendSms) {
     return;
   }

  // here your code for sending
}
你也可以为其他听众做类似的事情


当然,这只是一个例子——您不必使用4个变量。您可以将某些属性设置为$document,仅用于标记发送方式。

感谢您的回复,我从未使用过它们,但如果侦听与文档相关,您可能也无法在其中做出决定。然而,若它依赖于经过身份验证的用户,那个么它可能是可能的,但你们需要试一试。我已经开始考虑使用接口。我认为您可以创建一个单一的接口,它将是一个通用侦听器,然后设置一个属性作为条件来检查接口何时实现,然后您可以基于该属性手动执行它们。你怎么认为?