如何为控制台命令创建监听器

Posted

技术标签:

【中文标题】如何为控制台命令创建监听器【英文标题】:How to create a listener for console commands 【发布时间】:2017-02-03 17:01:12 【问题描述】:

我想在运行每个控制台命令时运行一个方法,如何为 lumen 中的所有控制台命令创建侦听器?

我尝试为ConsoleCommandEvent创建一个监听器,这个事件在\Symfony\Component\Console\Application::doRunCommand中被触发,但是没有附加事件调度器(阅读方法上面的评论: 如果已将事件调度器附加到应用程序,则事件也会在命令的生命周期内调度。)

更新使用此事件:Illuminate\Console\Events\ArtisanStarting 可能有助于完成这项工作,但它是一个不同的事件。通过在您运行 php artisan 的任何时候这样做,无论您是否运行实际命令,您的代码都将被执行。

【问题讨论】:

【参考方案1】:

在 Laravel 中,你可以收听 CommandStarting 事件,illuminate/console 也可以使用。

【讨论】:

【参考方案2】:

如果你只需要在每个命令执行时执行某个方法,你可以监听这个类。

Illuminate\Console\Events\ArtisanStarting

但我不知道如何获取侦听器中每个命令的名称。

【讨论】:

我已经发现这个活动很好。但问题是,正如它所说,它是在工匠开始时被解雇的!所以任何时候你运行php artisan 它都会触发事件,即使你只是想看到php artisan --help。因此,我将尝试找到一种附加调度程序的方法。顺便说一句,比你上一个解决方案好多了:) @Mohammad Mehdi Habibi 写在这里,如果你发现了。我认为您需要检查参数是否发送到php artisan,并且不要检查--help等选项 显然你可以获取参数和等等来检查它是否是一个实际的命令并解决问题,但它并不是那么好,除非我们必须这样做。

以上是关于如何为控制台命令创建监听器的主要内容,如果未能解决你的问题,请参考以下文章

如何为sensio框架控制器监听器启用注解阅读器服务?

如何为我在回收站视图中的卡片视图中的每个项目创建一个点击监听器

如何为附加到元素的每个事件侦听器打印或迭代? [复制]

如何为跨类 Volley 方法调用创建适当的 Volley 侦听器

如何为 MSMQ 创建 C# 侦听器服务作为 Windows 服务

如何为 Ext.Msg 定义监听器?