【问题标题】:Laravel 5.6 one event and many optional listenersLaravel 5.6 一个事件和许多可选的侦听器
【发布时间】:2018-12-29 23:37:31
【问题描述】:

在 Laravel 5.6 中

我有一个名为DocumentSend的活动,

我有很多听众喜欢(SendEmailSendNotificationSendSMS),

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

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

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

提前致谢

【问题讨论】:

  • 我已经开始考虑使用接口了。我认为您可以创建一个作为通用侦听器的单个接口,然后将属性设置为条件以检查接口何时实现,然后您可以根据该属性手动执行它们。你怎么看?

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复,Event Subscribers
  • 我从未使用过它们,但假设聆听与文档相关,您可能也无法在其中做出决定。但是,如果它依赖于经过身份验证的用户,它可能是可能的,但你需要试一试。
猜你喜欢
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
相关资源
最近更新 更多