Cakephp 3:从命令执行自定义命令

时间:2019-06-06 21:14:57

标签: php cakephp cakephp-3.6

在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]);

,但这不适用于命令。由于我在文档中没有找到任何信息,因此有解决该问题的想法吗?

1 个答案:

答案 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']);

另请参见 https://github.com/cakephp/cakephp/pull/13163