所以我用两个参数发出命令:
class ServerCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('chat:server')
->setDescription('Start the Chat server')
->addArgument('host', InputArgument::REQUIRED, 'Provide a hostname')
->addArgument('port', InputArgument::OPTIONAL, 'Provide a port number')
;
}
但server:chat
命令不要求我提供参数。
如何要求用户在自定义控制台命令中提供输入?
答案 0 :(得分:2)
除了user6827096的回答:还有interact()
方法可用于使用问题助手从交互式输入中预填充所需选项,除非{{{{}} 1}}传递给命令:
--no-interaction
在使用问题助手的combinatoin中使用它的一个很好的例子可以在Symfony附带的Sensio的Generator Bundle中找到:https://github.com/sensiolabs/SensioGeneratorBundle/blob/master/Command/GenerateBundleCommand.php#L112
答案 1 :(得分:1)
http://symfony.com/doc/current/components/console/helpers/questionhelper.html
protected function configure()
{
$this
->setName('chat:server')
->setDescription('Start the Chat server')
->addArgument('host', InputArgument::REQUIRED, 'Provide a hostname')
->addArgument('port', InputArgument::OPTIONAL, 'Provide a port number')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$helper = $this->getHelper('question');
$question1 = new Question('Provide a hostname: ', 'localhost');
$question2 = new Question('Provide a port number: ', '8080');
$localhost = $helper->ask($input, $output, $question1);
$port = $helper->ask($input, $output, $question2);