3

我在 Magento 2 中编写了一个模块,实际上是一个自定义命令。显然,Magento 2 控制台应用程序由Symfony Console提供支持。我关心的是如何禁用$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仍然存在。

有任何想法吗?

4

3 回答 3

5

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

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

use Symfony\Component\Console\Output\NullOutput;

$setupUpgradeCommand->run($setupUpgradeInput, new NullOutput());
于 2016-05-23T12:06:24.500 回答
1

您可以使用缓冲输出:

use Symfony\Component\Console\Output\BufferedOutput;

...

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

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

于 2016-04-20T04:56:31.153 回答
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

于 2016-04-20T06:26:18.287 回答