在Laravel 5.6中
我有一个名为DocumentSend
的事件,
我有很多听众,例如(SendEmail
,SendNotification
,SendSMS
)
侦听器是可选的(取决于文档类型和由用户定义), 现在的问题是:
如何仅用DocumentSend
侦听器调用SendSMS
事件,或如何用所有侦听器调用DocumentSend
?
希望您能用我的话,并告诉我解决该问题的最佳做法。
预先感谢
答案 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,仅用于标记应如何发送。