覆盖默认的控制台帮助文本

时间:2014-10-29 22:05:41

标签: symfony console-application

当使用Symfony\Component\Consolehelp命令时,我想干净地覆盖list的部分默认文本输出。特别是,详细程度选项的无偿换行会让我感到很烦恼,尽管我最终可能还想改变其余的帮助/列表文本。

即。这一行输出:

--verbose -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug.

如果我能将其更改为以下内容会更好:

--verbose -v|vv|vvv Set verbosity level.

我可以继承Symfony\Component\Console\Application并覆盖getDefaultInputDefinition()方法。

我或许可以使用getDefinition()setDefinition()的组合来摆弄InputDefinition对象。

但这些似乎不太可维护。

还有其他更好的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

试试这个。我不确定它会起作用,但看起来是最接近的解决方案。

use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputOption;

public function overrideVerboseInputOption(Application $application)
{
    $verboseOption = $application->getDefinition()->getOption('verbose');

    $customVerboseOption = new InputOption(
        $verboseOption->getName(),
        $verboseOption->getShortcut(),
        InputOption::VALUE_NONE,
        "Set verbosity level"
    );

    $options =& $application->getDefinition()->getOptions();

    unset($options['verbose']);

    $application->getDefinition()->addOption($customVerboseOption);
}