【问题标题】:How to use Event::queue in laravel?如何在 laravel 中使用 Event::queue?
【发布时间】:2014-12-29 14:43:53
【问题描述】:

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

Event::listen('send_notification');

在我使用的控制器中

Event::fire('send_notification');

但是因为这需要一些时间才能将用户发送到其他地方,所以我想使用

Event::queue('send_notification');

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

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

编辑:

关于触发事件的一个小说明,你可以像平常一样做所有你的工作,并添加所有Event::flush()作为过滤器,然后通过->after()afterFilter()调用该过滤器。

【问题讨论】:

  • 队列事件与队列驱动无关。 Event::queue 只是使用flush()“准备”一个事件并在该请求之后触发它
  • @lukasgeiter 谢谢你,我只是在两者之间迷路了,但现在可以说我有不止一个事件,我应该将它们作为数组放入flush() 还是?

标签: events laravel queue


【解决方案1】:

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

但是您可以延迟事件的触发并因此“准备”它。

用法非常基本。显然你需要一个或多个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

【讨论】:

  • 这正是我要找的,你通常把Event::flush()代码放在哪里? ,我正在考虑在return Redirect::back(); 之后使用它,但在return 之后你不能执行任何操作,所以?
  • thanx,它现在可以工作了,但它与通常的 Event::fire 花费的时间相同。
  • 太糟糕了。然后你必须使用我上面写的“真实”队列。我还将删除代码示例,因为它根本没有帮助...
  • 好吧,最后一个问题,如何检查事件是否排队?考虑这样的事情($this->getNotified() == true) ? Event::queue('update_subscribe') : Event::queue('remove_subscribe');
  • 我认为你不能这样做,我认为你不需要这样做。请注意,无论事件是否已排队,您都可以致电flush()(如果没有,它将什么都不做)
猜你喜欢
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多