如何在laravel中使用Event :: queue?

时间:2014-12-29 14:43:53

标签: events laravel queue

我已经阅读了很多关于Event::queue的内容,但我无法理解它,所以我有类似的东西:

Event::listen('send_notification');

在控制器中我使用

Event::fire('send_notification');

但是因为在将用户发送到其他地方之前需要一段时间,所以我想要使用

Event::queue('send_notification');

在重定向用户之后触发事件,但我不知道如何。

(在app/config/app.php我将queue driver设置为sync

修改

关于触发事件的小注释,您可以像平常一样完成所有工作,并将所有Event::flush()添加为过滤器,然后通过->after()或{{1}调用该过滤器}。

1 个答案:

答案 0 :(得分:3)

首先,让我说清楚一点。 Event::queue与配置中的Queue外观和查询驱动程序无关。它不会使您在请求发生后触发事件。

但你可以延迟发射一个事件,因此“准备”它。

用法很基本。显然你需要一个或多个Event::listen(没有它们就可以工作但根本没有意义)

Event::listen('send_notification', function($text){
    // send notification
});

现在我们将事件排队:

Event::queue('send_notification', array('Hello World'));

最后,通过调用flush

来解雇它
Event::flush('send_notification');

在评论中,您询问了一次刷新多个事件的问题。不幸的是,这不太可能。您必须多次致电flush()

Event::flush('send_notification');
Event::flush('foo');
Event::flush('bar');

如果你有很多要冲洗的事件,你可能需要考虑你的体系结构,以及是否可以将其中一些事件与多个监听器合并为一个事件。

重定向后刷新事件

在请求生命周期结束后,

Event::queue不能用于触发事件。你必须使用"real" queues