在 Laravel 5.6 中
我有一个名为DocumentSend
,
而且我有很多听众喜欢(SendEmail
,,,)SendNotification
,SendSMS
监听器是可选的(取决于文档类型并由用户定义),现在的问题是:
我如何仅使用侦听器或所有侦听器调用例如DocumentSend
事件?SendSMS
DocumentSend
我希望你明白我的意思,并告诉我解决我的问题的最佳做法。
提前致谢
在 Laravel 5.6 中
我有一个名为DocumentSend
,
而且我有很多听众喜欢(SendEmail
,,,)SendNotification
,SendSMS
监听器是可选的(取决于文档类型并由用户定义),现在的问题是:
我如何仅使用侦听器或所有侦听器调用例如DocumentSend
事件?SendSMS
DocumentSend
我希望你明白我的意思,并告诉我解决我的问题的最佳做法。
提前致谢
嗯,简单的答案是 - 你不能。当您触发事件时,所有注册的侦听器都将侦听此事件,并且所有侦听器都将启动。
但是,没有什么能阻止您阻止从侦听器运行代码。
例如,您可以像这样触发事件:
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 仅用于标记应如何发送。