如何在 Symfony 控制台中禁用命令的输出?

Toa*_*yen 3 php magento symfony symfony-console

我编写了一个模块,实际上是 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....
Run Code Online (Sandbox Code Playgroud)

不幸的是,即使我设置--quiet为 true,此命令的输出setup:upgrade仍然存在。

有任何想法吗?

qoo*_*mao 5

正如在评论中回答的那样......尽管与@toooni 的回答几乎完全相同。

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

use Symfony\Component\Console\Output\NullOutput;

$setupUpgradeCommand->run($setupUpgradeInput, new NullOutput());
Run Code Online (Sandbox Code Playgroud)