Symfony 覆盖默认控制台帮助文本
我想在使用Symfony 覆盖默认控制台帮助文本,symfony,console-application,Symfony,Console Application,我想在使用help或list命令时,完全覆盖Symfony\Component\Console输出的部分默认文本。特别是,verbosity选项的无偿换行让我非常恼火,尽管我最终可能还想稍微修改一下帮助/列表文本的其余部分 也就是说,这一行输出: --verbose-v | vv | vvv增加消息的详细程度:1用于正常输出,2用于更详细的输出,3用于调试。 如果我能把它改成: --verbose-v | vv | vvv设置详细级别。 我可以子类化Symfony\Component\Conso
help
或list
命令时,完全覆盖Symfony\Component\Console
输出的部分默认文本。特别是,verbosity选项的无偿换行让我非常恼火,尽管我最终可能还想稍微修改一下帮助/列表文本的其余部分
也就是说,这一行输出:
--verbose-v | vv | vvv增加消息的详细程度:1用于正常输出,2用于更详细的输出,3用于调试。
如果我能把它改成:
--verbose-v | vv | vvv设置详细级别。
我可以子类化Symfony\Component\Console\Application
并重写getDefaultInputDefinition()
方法
我也许可以使用getDefinition()
和setDefinition()
的组合来处理InputDefinition
对象
但这些似乎不太容易维护
有没有其他更好的方法来实现这一点?试试这个。我不确定它是否有效,但看起来是最接近的解决方案
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);
}
“详细级别”并没有解释关于选项的任何内容,它只是重复选项名称和值……这是一个填充示例。我可以说“Lorem ipsum dolor”。问题是,作为一名长期使用Unix命令行的用户,我发现Console的默认帮助和列表文本不一致且难看。我想将其更改为符合大多数Unix命令。我发现Console的默认帮助非常有用—比看起来漂亮或符合标准更重要。这就是说,您提出了一个有效的观点,并且应该能够以可维护的方式覆盖这些观点。这很有帮助。但我希望默认设置更简洁,“帮助”更详细。大多数情况下,使用工具的程序员只需要简单地提醒一下可用的选项,而不是更详细的描述。我会尽力让它工作的<代码>致命错误:未捕获异常“LogicException”,消息为“使用InputOption::value\u NONE模式时无法设置默认值”。在../vendor/symfony/console/symfony/Component/console/Input/InputOption.php:162@CXJ抱歉,我的参数顺序不正确。我已经编辑了代码,现在试试:)酷!不客气。这是在黑暗中拍摄的,所以我很高兴它能成功