有什么方法可以在 Laravel 5 中发送闭包吗?

Ben*_*ird 4 queue closures dispatch laravel-5

在 laravel 4 中,我可以使用 将闭包推送到队列上queue::push(function...),但这在 laravel 5 中不再有效。相反,我似乎必须为要推送到队列中的每个函数创建一个自定义 Job 类。

由于我想要推送的函数只有几行长,并且只在一个地方使用过,所以为每种情况编写一个完整的类似乎真的是浪费时间和空间。

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

这些对我来说似乎不太理想。还有其他方法可以做到这一点吗?或者我必须实施其中之一吗?

pat*_*ato 8

从 Laravel v5.7 开始,您可以像这样对闭包进行排队:

$podcast = App\Podcast::find(1);

dispatch(function () use ($podcast) {
    $podcast->publish();
});
Run Code Online (Sandbox Code Playgroud)

文档: https: //laravel.com/docs/7.x/queues#queueing-closures

但是,强烈建议使用专用的作业类来提高代码质量并更好地维护应用程序。想象一下您想要检查队列中剩余的任务,或者想要控制特定代码应该在哪个队列/连接上运行。

因此,您需要一个专门的作业类: https ://laravel.com/docs/5.7/queues#creating-jobs

我想说,编写一个专用类几乎是 Laravel 标准,这就是您应该遵循的标准。