【问题标题】:How to disable output for a command in Symfony Console?如何在 Symfony 控制台中禁用命令的输出?
【发布时间】:2016-04-20 03:58:44
【问题描述】:

我编写了一个模块,实际上是 Magento 2 中的一个自定义命令。很明显,Magento 2 控制台应用程序由 Symfony 控制台 提供支持。我关心的是如何为指定命令禁用$output 的输出?

例如:

$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 设置为 true,此命令的输出 setup:upgrade 仍然存在。

有什么想法吗?

【问题讨论】:

  • 插入Symfony\Component\Console\Output\NullOutput 类而不是实际输出。
  • @qooplmao 我很喜欢你的解决方案。它运行良好。

标签: php symfony magento symfony-console


【解决方案1】:

正如评论中的回答.. 虽然与@toooni 的回答几乎完全相同。

您可以插入NullOutput,而不是插入命令提供的实际输出对象。

use Symfony\Component\Console\Output\NullOutput;

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

【讨论】:

    【解决方案2】:

    您可以使用 BufferedOutput:

    use Symfony\Component\Console\Output\BufferedOutput;
    
    ...
    
    $setupUpgradeCommand->run($setupUpgradeInput, new BufferedOutput());
    

    这里描述了用法: http://symfony.com/doc/current/cookbook/console/command_in_controller.html

    【讨论】:

      【解决方案3】:

      另一种选择是使用记录器,如果您需要,可以在您的 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

      【讨论】:

      • 这是一种性感的方式。但不幸的是,我不想在 Magento composer.json 中添加太多的包...
      • 如果添加包开销太大,您可以简单地复制类
      猜你喜欢
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 2013-04-26
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      相关资源
      最近更新 更多