我正在开发一个非常简单的 Symfony 控制台应用程序。它只有一个带有一个参数的命令和几个选项。
我按照本指南创建了Application
该类的扩展。
这是该应用程序的正常用法,并且运行良好:
php application <argument>
这也可以正常工作(带有选项的参数):
php application.php <argument> --some-option
如果有人在php application.php
没有任何参数或选项的情况下运行,我希望它像用户运行一样运行php application.php --help
。
我确实有一个可行的解决方案,但它不是最佳的,而且可能有点脆弱。在我的扩展Application
类中,我重写了该run()
方法,如下所示:
/**
* Override parent method so that --help options is used when app is called with no arguments or options
*
* @param InputInterface|null $input
* @param OutputInterface|null $output
* @return int
* @throws \Exception
*/
public function run(InputInterface $input = null, OutputInterface $output = null)
{
if ($input === null) {
if (count($_SERVER["argv"]) <= 1) {
$args = array_merge($_SERVER["argv"], ["--help"]);
$input = new ArgvInput($args);
}
}
return parent::run($input, $output);
}
默认情况下,Application::run()
使用 null 调用InputInterface
,所以在这里我想我可以检查参数的原始值并强制添加一个帮助选项以传递给父方法。
有没有更好的方法来实现这一目标?