2015-01-09 3 views
5

を抑制する。は、私はsymfonyのコンソールコンポーネントを使用して、簡単なコンソールアプリケーションを持っている別のコマンド内のSymfonyコンソールコマンドを呼び出し、出力

私は2つのコマンド(例えば、cmdOnecmdTwo)があり、それらは独立して簡単に呼び出すことができます。

$ myApp.php cmdOne 
$ myApp.php cmdTwo 

どちらのコマンドは、私は簡単に-qオプションを発行することでミュートすることができ、出力のかなりの量を、持っています。

cmdTwoに電話しますが、cmdTwoを静かにしたいと思います。私は何か狂ったことをしようとはしていないが、私はドキュメントを読んでいるにもかかわらず、どこにでも行くのに苦労している。

はここに私のサンプルコードですこれまでのところ(このスニペットはcmdOne->execute()内に含まれます):

$command = $this->getApplication()->find('cmdTwo'); 

$input = new ArrayInput(array(
    'command' => 'cmdTwo', 
    '-q' => true 
)); 

$returnCode = $command->run($input, $output); 

これは、コードコマンドの実行のように、細かい動作しますが、(cmdTwoによって生成された)コンソール上の出力がありますどの私は見せたくありません。それは何かを明らかに(すなわちDEVによって作成されていない)「予約」だ、または私が行方不明ですので

はできません-qオプションを指定していますか?それは、出力を受け入れ、静かにそれをドロップ -

答えて

6

代わりに同じ$outputインスタンス(現在のコンソールに出力1)を渡すのでそれは基本的にブラックホールであるNullOutput

$returnCode = $command->run($input, new \Symfony\Component\Console\Output\NullOutput); 

のインスタンスを作成します。

+1

、それに+1を私にビート! – bishop

+0

@cerebriform:それはより多くのそれはスロー・スタート時間とプロジェクトを再インデックス(見つけるために正確なクラス名);-P – zerkms

+0

恐ろしいをphpstormに起因する可能性よりも、2分かかりました!それは治療をしてくれます、ありがとうございました。今ここにカーブボールがあります: 'cmdTwo'が失敗すれば、出力をキャッチする賢明な方法がありますか?現時点では、直接実行するとコンソールに直接エラーが表示されます。特定のエラーについて特定の終了コードを返してから、 'cmdOne'で処理する必要がありますか?それとも私は協力していない脂っこい画面とタブレット上でよ、...これは別のSO全く疑問 – HelloPablo

関連する問題