首页 > 解决方案 > Laravel 5.6 一个事件和许多可选的侦听器

问题描述

在 Laravel 5.6 中

我有一个名为DocumentSend,

而且我有很多听众喜欢(SendEmail,,,)SendNotificationSendSMS

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

我如何仅使用侦听器或所有侦听器调用例如DocumentSend事件?SendSMSDocumentSend

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

提前致谢

标签: laravellaravel-5listenerlaravel-5.6laravel-events

解决方案


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

但是,没有什么能阻止您阻止从侦听器运行代码。

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

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 仅用于标记应如何发送。


推荐阅读