3.9.8
以下のような2種類のConsole Commandがあって、片方がもう片方をexecで呼び出しているようなコードがあったとして、
<?php namespace App\Command; use Cake\Console\Arguments; use Cake\Console\Command; use Cake\Console\ConsoleIo; class FooCommand extends Command { public function execute(Arguments $args, ConsoleIo $io) { $this->log('THIS IS FOO INFO LOG', 'info'); exec('/path/to/cake bar'); } }
<?php namespace App\Command; use Cake\Console\Arguments; use Cake\Console\Command; use Cake\Console\ConsoleIo; class BarCommand extends Command { public function execute(Arguments $args, ConsoleIo $io) { $this->log('THIS IS BAR INFO LOG', 'info'); $this->log('THIS IS BAR ERROR LOG', 'error'); } }
以下のような出力を期待しているが、
Info: THIS IS FOO INFO LOG Error: THIS IS BAR INFO LOG Error: THIS IS BAR ERROR LOG
実際は以下のようなログしか出てこず、INFOログがでない。
Info: THIS IS FOO INFO LOG Error: THIS IS BAR ERROR LOG
理由は不明だがexecを使って他Console Commandを実行すると他Console Commandについてはエラーログしか出力されない。
その場合はこのようにexecuteCommandを使って他Commandを呼び出す。
$this->executeCommand(BarCommand::class, []);
ちなみに間違ってexecuteCommandで同じCommandを呼び出すと無限ループになって死ぬ。
$this->executeCommand(FooCommand::class, []);