使用事件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
使用事件
控制台组件的Application类允许您选择通过事件钩子到控制台应用程序的生命周期中。它不是重新发明轮子,而是使用Symfony EventDispatcher组件来完成工作:ob娱乐下载
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\控制台\应用程序;使用ob娱乐下载\组件\EventDispatcher\EventDispatcher;$调度程序=新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
使用ob娱乐下载\组件\控制台\ConsoleEvents;使用ob娱乐下载\组件\控制台\事件\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
使用ob娱乐下载\组件\控制台\ConsoleEvents;使用ob娱乐下载\组件\控制台\事件\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
使用ob娱乐下载\组件\控制台\ConsoleEvents;使用ob娱乐下载\组件\控制台\事件\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
使用ob娱乐下载\组件\控制台\ConsoleEvents;使用ob娱乐下载\组件\控制台\事件\ConsoleTerminateEvent;$调度程序->addListener (ConsoleEvents::终止,函数(ConsoleTerminateEvent$事件){//获取输出$输出=$事件->getOutput ();//获取已执行的命令$命令=$事件->getCommand ();//显示给定的内容$输出->writeln (sprintf ('在运行命令%s '后,$命令->getName ()));//更改退出代码$事件->setExitCode (128);});
提示
当命令引发异常时,也会分派此事件。然后它被分派在ConsoleEvents:错误
事件。在这种情况下接收到的退出代码是异常代码。