我正在尝试使用Symfony 2控制台组件构建一个简单的命令行应用程序:它应该只有一个命令可用,并且不需要任何参数,但它应该接受选项,如下所示:
$ my-command
$ my-command --config="config/path.json"
$ my-command --test
$ my-command --config="config/path.json" --test
我正在关注this guide制作单命令应用程序。 Application类扩展与指南基本相同,自定义命令是这样的:
use \Symfony\Component\Console\Command\Command;
use \Symfony\Component\Console\Input\InputInterface;
use \Symfony\Component\Console\Input\InputOption;
use \Symfony\Component\Console\Output\OutputInterface;
use \Symfony\Component\Console\Input\InputArgument;
class MyCommand extends Command
{
public function configure()
{
$this->setName('my-command')
->setDescription('My Command')
->addOption('config', null, InputOption::VALUE_OPTIONAL, 'Config path')
->addOption('test', null, InputOption::VALUE_NONE, 'Is Test?');
}
public function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('Nevermind...');
}
}
但是,这些是以前每个案例中的结果(除了第一个,没有选项,这是正常的):
$ my-command --test
Usage: php [options] [-f] <file> [--] [args...]
php [options] -r <code> [--] [args...]
php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
php [options] -- [args...]
php [options] -a
-a Run as interactive shell
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse and execute <file>.
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-r <code> Run PHP <code> without using script tags <?..?>
-B <begin_code> Run PHP <begin_code> before processing input lines
-R <code> Run PHP <code> for every input line
-F <file> Parse and execute <file> for every input line
-E <end_code> Run PHP <end_code> after processing all input lines
-H Hide any passed arguments from external tools.
-s Output HTML syntax highlighted source.
-v Version number
-w Output source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
args... Arguments passed to script. Use -- args when first argument
starts with - or script is read from stdin
--ini Show configuration file names
--rf <name> Show information about function <name>.
--rc <name> Show information about class <name>.
--re <name> Show information about extension <name>.
--ri <name> Show configuration for extension <name>.
使其工作的唯一方法,似乎是定义至少一个参数,并调用命令将一个参数传递给它(如$ my-command some-argument --test
中所示)。我无法让这个命令只用选项来调用它。
知道如何让它发挥作用吗?
谢谢大家。
答案 0 :(得分:0)
正如我在上面的评论中所说,问题不在于Symfony控制台。