在CakPHP 3.6.0中,Console Commands已添加,可以长期替换Shell和Tasks。
我目前正在设计一个cronjob命令,以在不同的时间间隔执行其他命令。所以我想从这样的Command类运行命令:
namespace App\Command;
// ...
class CronjobCommand extends Command
{
public function execute(Arguments $args, ConsoleIo $io)
{
// Run other command
}
}
对于Shell /任务,可以使用Cake\Console\ShellDispatcher
:
$shell = new ShellDispatcher();
$output = $shell->run(['cake', $task]);
,但这不适用于命令。由于我在文档中没有找到任何信息,因此有解决该问题的想法吗?
答案 0 :(得分:1)
您可以简单地实例化命令,然后运行它,如下所示:
try {
$otherCommand = new \App\Command\OtherCommand();
$result = $otherCommand->run(['--foo', 'bar'], $io);
} catch (\Cake\Console\Exception\StopException $e) {
$result = $e->getCode();
}
CakePHP 3.8将引入一种方便的方法来帮助实现这一目标。引用即将发布的文档:
您可能需要从命令中调用其他命令。您可以使用
executeCommand
为此::// You can pass an array of CLI options and arguments. $this->executeCommand(OtherCommand::class, ['--verbose', 'deploy']); // Can pass an instance of the command if it has constructor args $command = new OtherCommand($otherArgs); $this->executeCommand($command, ['--verbose', 'deploy']);