Laravel阻止事件传播

时间:2015-04-07 15:01:05

标签: php laravel laravel-5

我在事件中注册了两个排队事件处理程序:

// in app/Providers/EventServiceProvider.php
//...

'App\Events\UserWasCreated' => [
    'App\Handlers\Events\RegisterInSalesForce',
    'App\Handlers\Events\SendMailToAdmin',
],

我希望仅在SendMailToAdmin正常时运行RegisterInSalesForce。我尝试在false失败时返回RegisterInSalesForce,在成功时返回true,但它不起作用。

我该怎么办?我错过了什么吗?

3 个答案:

答案 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来完成此操作。

相关问题