laravel - Laravel 5.6 一个事件和许多可选的侦听器
问题描述
在 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 仅用于标记应如何发送。
推荐阅读
- javascript - 打字稿是否允许接口和字符串联合类型?
- json - 为什么我不能在 Flatlist 中显示我的项目?
- java - 我无法在 Vaadin 组件中调用 JpaReposistory api
- java - 在 lambda 表达式中分配局部变量
- python - 这个片段是如何工作的?“pk=request.POST['选择']”
- r - 忘记云服务器上的 Rstudio 密码
- java - 将 Web 应用程序部署到已经启动的码头
- javascript - 任何类似的函数,如 c++ 中的 JS Array.prototype.map?
- r - 对 R 中的整洁数据同时执行多个 t.tests
- python - 文本文件中带有制表符的分隔符