symfony 的command系统,有两部分构成:Application和command
1. Application是一个容器,负责对command进行管理。
2。command是每一个具体的命令。
Application 详细说明:
主要属性:
1. $terminal 终端,内部调用,不需要用户自己做任何控制,本属性通过配置,或者直接通过命令行的方式来确定命令展示区域的高度和宽度。在初始化函数里面直接赋值。
2. $dispatcher 事件分发,只有定义了,才会开启事件机制。
主要函数:
1. run 运行命令,是外部调用运行命令的起点。
首先,初始化input和output
然后,根据输入和参数,配置input和output。
最后,调用dorun,实际运行代码。
2. dorun 命令的实际运行程序。
2.1 version和help选项的默认处理。
2.2 如果参数中没有命令名称,调用默认命令(默认是list)。
2.3 根据命令名称,find(找到)对应的命令。
2.4 调用doRunCommand,执行找到的命令。
3. find 根据命令名称,查找对应命令。
3.1 commandLoader和commands合并,组成全部commands
$allCommands = $this->commandLoader ? array_merge($this->commandLoader->getNames(), array_keys($this->commands)) : array_keys($this->commands);
3.2 用正则查找格式跟输入命令名称匹配的命令(首先大小写一致的匹配,如果不存在,忽略大小写,重新匹配一次),找不到对应命令,直接扔异常。
3.3 根据名称,检查commandLoader和commands中是否存在此命令,如果commandLoader中存在,加到commands中,从数组commands中读取对应command。
4. doRunCommand 针对当前command,运行对应的run函数,并且生成各种事件。
command类
主要函数:
1. execute 命令的执行逻辑,需要用户补全。
2. configure 配置函数,运行前补全
3. run,实际被application调用的函数,本函数调用excute运行。