2017-06-07 25 views
2

在laravel 4中,我可以使用queue::push(function...)将封闭推入队列,但是这不再适用于laravel 5.相反,似乎我必须为每个要推入队列的函数都创建一个自定义的Job类。有没有办法在laravel 5中发送闭包?

由于我想要推动的功能只有几行,而且只能在一个地方使用,所以为每个案例编写完整的课程真的看起来像浪费时间和空间。

我现在可以想到的最好的“解决方案”是要么有一个帮助函数,它使用PHP的反射方法在被调用时动态生成一个新的类,或者具有接受闭包作为参数的通用作业,即dispatch(new ClosureJob(function(){...}));

这些对我来说似乎不太理想。有没有另一种方法来做到这一点?或者我将不得不实施其中之一?

+0

你是如何最终解决这个问题? – GGGforce

+0

@GGGforce每个功能的自定义作业。我现在有大约30个。仅仅因为它比尝试巧妙做事更简单。 – Benubird

+0

我明白了。检查我的答案下面,也许它会有所帮助。 – GGGforce

回答

1

我已经通过依赖OpisClosure库实现了这一点。扩展类像这样:

class QueueableClosure extends SerializableClosure 
{ 
    public function handle() { 
     call_user_func_array($this->closure, func_get_args()); 
    } 
} 

然后使用它是这样的:

Queue::push(new QueueableClosure(function(){ 
    Log::debug("this is the QueueableClosure in action."); 
})); 
相关问题