感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
如果一个命令依赖于另一个在它前面运行的(命令),不同于让用户牢记命令的执行顺序,你可以自行直接调用它。当你要创建一个“强力”命令来运行其他命令的组合时(例如,生产环境下的代码发生改变时,所有需要运行的命令就是一个组合:清除缓存、生成doctrine2代理、剥离Assetic资源、等等)也是有用的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | protected function execute(InputInterface $input, OutputInterface $output)
{
$command = $this->getApplication()->find('demo:greet');
$arguments = array(
'command' => 'demo:greet',
'name' => 'Fabien',
'--yell' => true,
);
$greetInput = new ArrayInput($arguments);
$returnCode = $command->run($greetInput, $output);
// ...
} |
首先,你要把命令名传入 find()
来找到你需要执行的命令。然后,你需要创建一个全新的 ArrayInput
,连同你希望传入到命令中的参数和选项。
最终,调用 run()
来真正执行命令并返回“从命令中返回的code” (即,来自命令的 execute()
方法的返回值)。
如果你希望抑制所执行的命令的输出,传入一个 NullOutput
作为 $command->run()
的第二参数。
注意,所有命令都是在相同的进程内运行,在这种情况下某些内置的Symfony命令将不能工作得很好。例如 cache:clear
以及 cache:warmup
命令会改变一些类的定义,因此在它们之后运行的命令可能会中断。
多数时候,调用一个来自“未在命令行中执行的代码”中的命令,并不是好主意。主要原因是,命令的output是针对控制台进行了优化的,而不是为了传给其他命令的。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。