【发布时间】:2015-11-12 17:36:00
【问题描述】:
我想知道 Laravel 5.1 中不同的类命令类之间有什么区别。据我所知,Laravel 5.1 有以下可用:
- 控制台命令 (
artisan make:console) - 命令 (
artisan make:command)- 处理程序 (
artisan make::command --handler)
- 处理程序 (
- 工作 (
artisan make:job)
我是直接从 4.2 到 5.1,所以我不知道在 4.2 和 5.1 之间发生了什么,但有人告诉我,中间的那个(just 命令)基本上是不应该的不再使用——它们是从可排队作业在 5.0 中成为“命令”时开始使用的,但 Laravel 此后决定反对这一点,它们只是为了兼容性。但是,我不是 100% 在这一点上,所以澄清将不胜感激。
我的具体用例是我想要一个放置独立的“可运行”任务的地方。例如,将从给定目录中删除 5 天之前的文件(但它可以做任何事情)。
起初,这听起来像是一个控制台命令——我希望能够从artisan 运行它,首先。但我也可能希望它按计划进行(太好了,artisan schedule:run 运行控制台命令)。但我可能还想从代码异步执行它。控制台命令可以使用Artisan::call()同步运行,但对于异步,这是(我认为)队列进入的地方,它突然必须成为一项工作。
好的,我们有工作了。我们现在可以从代码中将它添加到队列中,但是我们如何将它作为工匠命令(同步)执行呢?我可以只创建一个瘦控制台命令并将DispatchesJobs 特征(或其中的代码)添加到它,然后分派工作吗?作业是否总是必须排队,或者我们可以让作业同步执行(理想情况下,输出到控制台命令的输出?)同样的问题适用于按计划运行它 - 我应该创建这个控制台命令并将其添加到调度程序,或者我可以让调度程序直接运行作业吗?
最后,我们有既不是控制台命令也不是作业的“命令”。正如我之前所说,人们告诉我这些只是 Laravel 5.0 代码更改(有点)恢复的挂件。但是artisan make 命令对他们来说仍然存在,所以他们不能那个死了。此外,一个自我处理命令(默认,带有handle 方法)和一个“需要”处理程序类(运行artisan make:command --handler)的处理是什么?您如何实际执行这些操作?手动使用(new App\Command\SomeCommand)->handle(); 或(new App\handlers\SomeCommandHandler)->handle(new App\Command\SomeCommand),或者是否有一些我不知道的隐藏系统(也许可以使用作业/队列调度程序调度它们)?您还可以创建“队列”命令artisan make::command --queued,那么它们也有什么不同呢?
我想我的问题归结为以下几点:
- 它们之间的真正(语义和功能)区别是什么?
- “运行”它们的正确方法是什么?
- 对于需要以任何我认为合适的方式运行的通常独立的代码段,哪种方式最适合我?
我在文档中找到了有关如何使用队列和创建控制台命令的信息,但没有关于何时使用它们的确切信息,或者关于命令类和处理程序的任何信息。
相关但不完全相同(也未答复):Laravel 5.1 commands and jobs
【问题讨论】:
标签: laravel laravel-5 jobs laravel-5.1