我在事件中注册了两个排队事件处理程序:
// in app/Providers/EventServiceProvider.php
//...
'App\Events\UserWasCreated' => [
'App\Handlers\Events\RegisterInSalesForce',
'App\Handlers\Events\SendMailToAdmin',
],
我希望仅在SendMailToAdmin
正常时运行RegisterInSalesForce
。我尝试在false
失败时返回RegisterInSalesForce
,在成功时返回true
,但它不起作用。
我该怎么办?我错过了什么吗?
答案 0 :(得分:1)
使用单独的事件处理程序并将逻辑添加到方法中,或者使用另一个事件" RegisteredInSalesForce"所以听众会发出命令" SendMailToAdmin"。
答案 1 :(得分:1)
你不能完全这样做,但你可以为此做一个解决方法:
在您的RegisterInSalesForce
事件中,您可以触发另一个事件(例如RegisteredInSales
)然后收听它。
class RegisterInSalesForce {
public function handle()
{
// do your stuff
if($stuff == true){
$response = Event::fire(new RegisteredInSales);
}
}
}
答案 2 :(得分:1)
在Laravel 5.5中,您只需返回false
即可停止传播事件。
来自Laravel 5.5文档
停止活动的传播
https://laravel.com/docs/5.5/events#defining-listeners
有时,您可能希望停止将事件传播给其他侦听器。您可以通过从侦听器的句柄方法返回
false
来完成此操作。