使用事件

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.4,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

使用事件

控制台组件的Application类允许您选择通过事件钩子到控制台应用程序的生命周期中。它不是重新发明轮子,而是使用Symfony EventDispatcher组件来完成工作:欧宝娱乐app下载地址

1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址组件控制台应用程序使用欧宝娱乐app下载地址组件EventDispatcherEventDispatcher调度程序EventDispatcher ();应用程序应用程序();应用程序->setDispatcher (调度程序);应用程序->run ();

谨慎

控制台事件仅由正在执行的主命令触发。由main命令调用的命令不会触发任何事件。

ConsoleEvents:命令事件

典型的目的:在任何命令运行之前做一些事情(比如记录将要执行的命令),或者显示关于要执行的事件的一些信息。

在执行任何命令之前ConsoleEvents:命令事件被分派。侦听器接收一个ConsoleCommandEvent事件:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用欧宝娱乐app下载地址组件控制台ConsoleEvents使用欧宝娱乐app下载地址组件控制台事件ConsoleCommandEvent调度程序->addListener (ConsoleEvents::命令,函数(ConsoleCommandEvent事件//获取输入实例输入事件->getInput ();//获取输出实例输出事件->getOutput ();//获取要执行的命令命令事件->getCommand ();//写关于命令的内容输出->writeln (sprintf ('在运行命令%s'之前命令->getName ()));//获取应用程序应用程序命令->getApplication ();});

禁用监听器中的命令

使用disableCommand ()方法,可以禁用侦听器中的命令。应用程序将会执行命令,但将返回代码113(定义在ConsoleCommandEvent: RETURN_CODE_DISABLED).这段代码是预留出口码对于符合C/ c++标准的控制台命令:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用欧宝娱乐app下载地址组件控制台ConsoleEvents使用欧宝娱乐app下载地址组件控制台事件ConsoleCommandEvent调度程序->addListener (ConsoleEvents::命令,函数(ConsoleCommandEvent事件//获取要执行的命令命令事件->getCommand ();/ /……检查命令是否能执行成功//禁用该命令,这将导致该命令被跳过//和代码113从应用程序返回事件->disableCommand ();//可以在以后的监听器中启用该命令如果(!事件->commandShouldRun ()) {事件->enableCommand ();}});

ConsoleEvents:错误事件

典型的目的:处理命令执行过程中抛出的异常。

每当命令抛出异常(包括由事件侦听器触发的异常)时,ConsoleEvents:错误事件被分派。侦听器可以在应用程序抛出异常之前包装或更改异常,或者执行任何有用的操作。

侦听器接收一个ConsoleErrorEvent事件:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址组件控制台ConsoleEvents使用欧宝娱乐app下载地址组件控制台事件ConsoleErrorEvent调度程序->addListener (ConsoleEvents::错误,函数(ConsoleErrorEvent事件输出事件->getOutput ();命令事件->getCommand ();输出->writeln (sprintf ('哎呀,运行命令时抛出异常%s'命令->getName ()));//获取当前退出代码(异常代码)exitCode事件->getExitCode ();//将异常更改为另一个异常事件->setError (\ LogicException (捕获异常的exitCode事件->getError ()));});

ConsoleEvents:终止事件

典型的目的:命令执行后,需要进行一些清理操作。

执行该命令后,可以使用ConsoleEvents:终止事件被分派。它可用于执行所有命令需要执行的任何操作,或清除在ConsoleEvents:命令监听器(比如发送日志、关闭数据库连接、发送电子邮件等等)。侦听器还可能更改退出代码。

侦听器接收一个ConsoleTerminateEvent事件:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址组件控制台ConsoleEvents使用欧宝娱乐app下载地址组件控制台事件ConsoleTerminateEvent调度程序->addListener (ConsoleEvents::终止,函数(ConsoleTerminateEvent事件//获取输出输出事件->getOutput ();//获取已执行的命令命令事件->getCommand ();//显示给定的内容输出->writeln (sprintf ('在运行命令%s'后命令->getName ()));//更改退出代码事件->setExitCode (128);});

提示

当命令引发异常时,也会分派此事件。然后它被分派在ConsoleEvents:错误事件。在这种情况下接收到的退出代码是异常代码。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。