使用事件
编辑该页面使用事件
控制台的应用程序类组件允许您选择钩到一个控制台应用程序的生命周期事件。而不是重新发明轮子,它使用Symfony EventDispatcher组件做这项工作:ob娱乐下载
1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\控制台\应用程序;使用ob娱乐下载\组件\EventDispatcher\EventDispatcher;美元调度程序=新EventDispatcher ();美元应用程序=新应用程序();美元应用程序- >setDispatcher (美元调度程序);美元应用程序- >run ();
谨慎
控制台事件只是引发的主要命令被执行。命令由主命令调用不会引发任何事件。
的ConsoleEvents:命令
事件
典型的目的:做事之前运行任何命令(如日志记录命令是执行),或显示的事件被执行。
在执行任何命令,ConsoleEvents:命令
事件分派。听众接收ConsoleCommandEvent事件:
1 2 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++标准:
1 2 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事件:
1 2 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事件:
1 2 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:错误
事件。收到的退出代码在本例中是异常代码。
的ConsoleEvents:信号
事件
典型的目的:执行一些操作命令执行后被人打断了。
信号是异步通知发送到一个过程来通知它发生的一个事件。例如,当你按下Ctrl + C
在一个命令中,操作系统发送信号情报
信号。
当一个命令被打断,Symfony分派ob娱乐下载ConsoleEvents:信号
事件。听这个事件可以执行一些操作(如日志记录一些结果,清洗一些临时文件,等等)之前完成该命令执行。
听众接收ConsoleSignalEvent事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\控制台\ConsoleEvents;使用ob娱乐下载\组件\控制台\事件\ConsoleSignalEvent;美元调度程序- >addListener (ConsoleEvents::信号,函数(ConsoleSignalEvent美元事件):无效{/ /获取信号的数字美元信号=美元事件- >getHandlingSignal ();/ /设置退出代码美元事件- >setExitCode (0);如果(\ SIGINT = = =美元信号){回声“拜拜!”;}});
也可以中止出口如果你想命令继续执行即使在事件已经派遣,多亏了abortExit ()方法:
1 2 3 4 5 6
使用ob娱乐下载\组件\控制台\ConsoleEvents;使用ob娱乐下载\组件\控制台\事件\ConsoleSignalEvent;美元调度程序- >addListener (ConsoleEvents::信号,函数(ConsoleSignalEvent美元事件){美元事件- >abortExit ();});
6.3
的setExitCode ()
,getExitCode ()
和abortExit ()
方法在Symfony 6.3中引入的。ob娱乐下载
提示
所有可用的信号(信号情报
,SIGQUIT
等)被定义为常量的PCNTL PHP扩展。
如果你使用控制台组件在一个Symfony应用程序,命令自己可以处理信号。ob娱乐下载为此,实现SignalableCommandInterface和订阅一个或多个信号:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29
/ / src /命令/ SomeCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\命令\SignalableCommandInterface;类SomeCommand扩展命令实现了SignalableCommandInterface{/ /……公共函数getSubscribedSignals():数组{/ /返回这里PCNTL扩展定义的常量返回[\ SIGINT \ SIGTERM];}公共函数handleSignal(int美元信号):int|假{如果(\ SIGINT = = =美元信号){/ /……}/ /……/ /返回一个整数设置退出代码,或/ /错误继续正常执行返回0;}}
ob娱乐下载Symfony不处理任何信号接收的命令(甚至没有SIGKILL
,SIGTERM
等等)。这种行为的目的是,让你灵活地处理所有信号如终止命令之前做一些任务。
6.3
在Syob娱乐下载mfony版本6.3之前,所有信号(除了SIGUSR1
和SIGUSR2
通过调用)将终止脚本退出(0)
。从6.3 Symfony开始ob娱乐下载,没有更多的信号自动调用退出(0)
。
6.3
不返回一个值handleSignal ()
弃用,因为Symfony 6.3。ob娱乐下载