Laravel 5.6一个事件和多个可选侦听器
在拉威尔5.6 我有一个名为Laravel 5.6一个事件和多个可选侦听器,laravel,laravel-5,listener,laravel-5.6,laravel-events,Laravel,Laravel 5,Listener,Laravel 5.6,Laravel Events,在拉威尔5.6 我有一个名为DocumentSend的事件 我有很多听众,比如(sendmail,SendNotification,SendSMS) 侦听器是可选的(取决于文档类型并由用户定义), 现在的问题是: 例如,如何仅使用SendSMS侦听器调用DocumentSend事件,或使用所有侦听器调用DocumentSend事件 我希望你明白我的意思,并告诉我我的问题的最佳做法 提前谢谢好吧,简单的答案是——你不能。当您触发事件时,所有注册的侦听器都将侦听此事件,并且所有侦听器都将启动 然而,
DocumentSend
的事件
我有很多听众,比如(sendmail
,SendNotification
,SendSMS
)
侦听器是可选的(取决于文档类型并由用户定义),
现在的问题是:
例如,如何仅使用SendSMS
侦听器调用DocumentSend
事件,或使用所有侦听器调用DocumentSend
事件
我希望你明白我的意思,并告诉我我的问题的最佳做法
提前谢谢好吧,简单的答案是——你不能。当您触发事件时,所有注册的侦听器都将侦听此事件,并且所有侦听器都将启动 然而,并没有什么可以阻止您从侦听器运行代码 例如,您可以触发如下事件:
event(new DocumentSend($document, true, false, false));
public function __construct($document, $sendEmail, $sendNotification, $sendSms)
{
$this->document = $document;
$this->sendEmail = $sendEmail;
$this->sendNotification = $sendNotification;
$this->sendSms = $sendSms;
}
public function handle(DocumentSend $event)
{
if (!$event->sendSms) {
return;
}
// here your code for sending
}
并定义DocumentSend的构造函数,如下所示:
event(new DocumentSend($document, true, false, false));
public function __construct($document, $sendEmail, $sendNotification, $sendSms)
{
$this->document = $document;
$this->sendEmail = $sendEmail;
$this->sendNotification = $sendNotification;
$this->sendSms = $sendSms;
}
public function handle(DocumentSend $event)
{
if (!$event->sendSms) {
return;
}
// here your code for sending
}
现在,在每个侦听器中,您只需验证正确的变量,例如在handle
中的sendmail
listener中,您可以这样做:
event(new DocumentSend($document, true, false, false));
public function __construct($document, $sendEmail, $sendNotification, $sendSms)
{
$this->document = $document;
$this->sendEmail = $sendEmail;
$this->sendNotification = $sendNotification;
$this->sendSms = $sendSms;
}
public function handle(DocumentSend $event)
{
if (!$event->sendSms) {
return;
}
// here your code for sending
}
你也可以为其他听众做类似的事情
当然,这只是一个例子——您不必使用4个变量。您可以将某些属性设置为$document,仅用于标记发送方式。感谢您的回复,我从未使用过它们,但如果侦听与文档相关,您可能也无法在其中做出决定。然而,若它依赖于经过身份验证的用户,那个么它可能是可能的,但你们需要试一试。我已经开始考虑使用接口。我认为您可以创建一个单一的接口,它将是一个通用侦听器,然后设置一个属性作为条件来检查接口何时实现,然后您可以基于该属性手动执行它们。你怎么认为?