2016-04-20 120 views
2

我寫了一個模塊,實際上是Magento 2中的一個自定義命令。Magento 2控制檯應用程序很自豪地由供電,Symfony Console,顯然。我的關注點是如何禁用指定命令的輸出$output如何在Symfony控制檯中禁用命令的輸出?

例如:

$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.... 

不幸的是,即使我設置--quiet此命令setup:upgrade的真實,輸出仍然存在。

任何想法?

+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

你可以簡單地複製類,如果添加包是太多的開銷 –

相關問題