2016-04-20 25 views
2

Magento 2で実際にカスタムコマンドを書きました。Magento 2コンソールアプリケーションは、誇らしげにsymfony Consoleによって提供されています。そして私の懸念は、特定のコマンドの出力を$outputからディセーブルにする方法です。例えばSymfony Consoleでコマンドの出力を無効にする方法は?

$setupUpgradeCommand = $this->getApplication()->find('setup:upgrade'); 

$setupUpgradeArguments = array(
    'command' => 'setup:upgrade', 
    '--quiet' => true, 
); 

$setupUpgradeInput = new ArrayInput($setupUpgradeArguments); 

$start = microtime(true); 
$output->writeln('<info>Start upgrading module schemas...</info>'); 
$setupUpgradeCommand->run($setupUpgradeInput, $output); 
$output->writeln('...............................<info>OK</info>'); 

// My long logic-code start from here.... 

は残念ながら、でも私はまだそこに、このコマンドsetup:upgradeの真、出力に--quietを設定します。

アイデア?

+1

実際の出力ではなく、 'Symfony \ Component \ Console \ Output \ NullOutput'クラスを挿入してください。 – qooplmao

+1

@ qooplmao私はあなたのソリューションが大好きです。それは完璧に働いています。 –

答えて

3

コメントで答えると、ほぼ正確に@toooniの回答と同じですが。

コマンドによって提供される実際の出力オブジェクトを挿入するのではなく、NullOutputを挿入できます。

use Symfony\Component\Console\Output\NullOutput; 

$setupUpgradeCommand->run($setupUpgradeInput, new NullOutput()); 
1

別のオプションは、ロガーを使用して、あなたがそれを求めるならば、これはあなたのCLIに吐き出し持っているだろう。あなたは(今、古いで)この中でそれについてのニュース記事をより多くを読むことができます:http://symfony.com/blog/new-in-symfony-2-4-show-logs-in-console

あなたもポストから取り出した出力をフォーマットすることができ、完全な例を:

services: 
    my_formatter: 
     class: Symfony\Bridge\Monolog\Formatter\ConsoleFormatter 
     arguments: 
      - "[%%datetime%%] %%start_tag%%%%message%%%%end_tag%% (%%level_name%%) %%context%% %%extra%%\n" 

monolog: 
    handlers: 
     console: 
      type: console 
      verbosity_levels: 
       VERBOSITY_NORMAL: NOTICE 
      channels: my_channel 
      formatter: my_formatter 

あなたがここにドキュメントを見つけることができます。 http://symfony.com/doc/current/cookbook/logging/monolog.html

+0

これはセクシーな方法です。しかし残念ながら、私はMagento composer.jsonにあまりにも多くのパッケージを追加したくありません。 –

+0

パッケージを追加するにはあまりにもオーバーヘッドがある場合は、単純にクラスをコピーすることができます –

関連する問題