Cakephp 3: выполнить пользовательскую команду из команды - PullRequest
0 голосов
/ 07 июня 2019

В CakPHP 3.6.0 Консольные команды были добавлены для замены оболочек и задач на длительный срок.

В настоящее время я разрабатываю команду cronjob для выполнения других команд в разные промежутки времени. Поэтому я хочу запустить команду из класса Command следующим образом:

namespace App\Command;
// ...

class CronjobCommand extends Command
{
    public function execute(Arguments $args, ConsoleIo $io)
    {
        // Run other command
    }
}

Для оболочек / задач можно использовать Cake\Console\ShellDispatcher:

$shell = new ShellDispatcher();
$output = $shell->run(['cake', $task]);

но это не работает для команд. Поскольку я не нашел никакой информации в документации, есть идеи, как решить эту проблему?

1 Ответ

1 голос
/ 07 июня 2019

Вы можете просто создать экземпляр команды и затем запустить ее следующим образом:

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.

...