Laravel 5.6 一个事件和许多可选的侦听器
Laravel 5.6 one event and many optional listeners
在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;
}
现在在每个监听器中你可以只验证正确的变量,所以例如在 handle
中的 SendEmail
监听器中你可以这样做:
public function handle(DocumentSend $event)
{
if (!$event->sendSms) {
return;
}
// here your code for sending
}
您可以为其他听众做类似的事情。
当然这只是示例 - 您不必使用 4 个变量。您可以将某些属性设置为 $document only 以标记应如何发送。
在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;
}
现在在每个监听器中你可以只验证正确的变量,所以例如在 handle
中的 SendEmail
监听器中你可以这样做:
public function handle(DocumentSend $event)
{
if (!$event->sendSms) {
return;
}
// here your code for sending
}
您可以为其他听众做类似的事情。
当然这只是示例 - 您不必使用 4 个变量。您可以将某些属性设置为 $document only 以标记应如何发送。