Laravel 停止事件传播

Laravel stop events propagation

我已经在一个事件上注册了两个 queued 事件处理程序:

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

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

我想 运行 SendMailToAdmin 只有 RegisterInSalesForce 可以。我尝试 return false in RegisterInSalesForce 失败, true 成功,但它不起作用。

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

使用单独的事件处理程序并将逻辑添加到方法中,或者有另一个事件 "RegisteredInSalesForce" 因此它的侦听器将调度命令 "SendMailToAdmin"。

你不能完全那样做,但你可以做一个解决方法:

在您的 RegisterInSalesForce 事件中,您可以触发另一个事件(例如 RegisteredInSales)然后收听它。

class RegisterInSalesForce {

    public function handle()
    {
        // do your stuff

        if($stuff == true){
            $response = Event::fire(new RegisteredInSales);
        }

    }
}

在 Laravel 5.5 中,您可以 return false 停止传播事件。

来自 Laravel 5.5 文档

停止传播事件

https://laravel.com/docs/5.5/events#defining-listeners

Sometimes, you may wish to stop the propagation of an event to other listeners. You may do so by returning false from your listener's handle method.