如何调用其他命令
编辑本页如何调用其他命令
如果一个命令依赖于在它之前运行的另一个命令,您可以调用控制台命令本身。如果一个命令依赖于另一个命令,或者如果你想创建一个运行一堆其他命令的“元”命令(例如,当项目的代码在生产服务器上发生变化时需要运行的所有命令:清除缓存、生成Doctrine代理、转储web资产……),这是很有用的。
使用find ()方法通过传递命令名称来查找要运行的命令。然后,创建一个新的ArrayInput使用要传递给命令的参数和选项。
最终,调用run ()
方法实际运行该命令并从该命令返回返回的代码(从命令的返回值)execute ()
方法):
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
/ /……使用ob娱乐下载\组件\控制台\命令;使用ob娱乐下载\组件\控制台\输入\ArrayInput;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;类CreateUserCommand扩展命令{/ /……受保护的函数执行(InputInterface$输入, OutputInterface$输出):无效{$命令=$这->getApplication ()->找到(“演示:问候”);$参数= (“名字”= >“法”,”,大喊“= >真正的,);$greetInput=新ArrayInput ($参数);$returnCode=$命令->运行($greetInput,$输出);/ /……}}
提示
如果您想抑制已执行命令的输出,请传递一个NullOutput正如第二个论点命令- > run ()
.
谨慎
请注意,所有命令都将在同一个进程中运行,Symfony的一些内置命令可能不能很好地以这种方式工作。ob娱乐下载例如,缓存:清晰
而且缓存:热身
命令会改变一些类的定义,所以在它们之后运行一些命令很可能会出错。
请注意
大多数情况下,从未在命令行上执行的代码中调用命令并不是一个好主意。主要原因是命令的输出针对控制台进行了优化,不能传递给其他命令。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。