使用Symfony3控制台,我如何判断用户何时提供了一个选项,但提供的选项没有值?而不是完全不提供选择权?
以下面的控制台配置为例。
<?php
class MyCommand extends \Symfony\Component\Console\Command\Command
{
// ...
protected function configure()
{
$this->setName('test')
->setDescription('update an existing operation.')
->addOption(
'option',
null,
InputOption::VALUE_OPTIONAL,
'The ID of the operation to update.'
);
}
}
命令help将该选项显示为--option[=OPTION]
,因此我可以用以下方式调用它。
bin/console test
bin/console test --option
bin/console test --option=foo
但是,在前两种情况下,$input->getOption()
将返回NULL
。在第二种情况下,我期望它返回TRUE
,或者指示提供了该选项的其他内容。
所以我不知道如何识别根本不提供选项和提供但没有值的选项的区别。
如果没有办法区分,那么InputOption::VALUE_OPTIONAL
的用例是什么?
4条答案
按热度按时间5cg8jx4n1#
从Symfony 3开始4,你可以设置默认值为
false
并检查:1.如果值为
false
,则选项不存在1.如果值为
null
,则存在无值的选项1.否则它就有它的价值
例如
amrnrhlw2#
你把两件事结合在一起。没有值
InputOption::VALUE_NONE
的选项和具有可选值InputOption::VALUE_OPTIONAL
的选项。该文档说:http://symfony.com/doc/current/console/input.html
没有任何东西禁止您创建带有可选地接受值的选项的命令。但是,您无法区分何时使用了不带值的选项(command --language)或何时根本没有使用该选项(command)。在这两种情况下,为该选项检索的值都将为空。
这正好描述了你的情况。
您无法区分什么时候参数根本没有传递,或者传递了但没有值。这就是
InputOption::VALUE_NONE
的用途。根据您的使用情况,您可以为
console test
和console test --option
情况下使用的参数提供默认值。还要注意,
addOption
将快捷方式作为第二个参数。ecfdbz9o3#
编辑于6/10/21:这只适用于Symfony 3。3及以下。正确答案现在是ScorpioT 1000提供的答案
在浏览了
Symfony\Component\Console\Input\InputInterface
之后,我发现了getParameterOption()
方法,它提供了区分未使用的选项、未使用值的选项和使用值的选项的能力。在命令的
configure()
方法中:$this->addOption('test', null, InputOption::VALUE_OPTIONAL);
在命令的
execute()
方法中:$test = $input->getOption('test'); $rawTest = $input->getParameterOption('--test');
为给定的命令行生成以下值:
> bin/console some:cmd
$test
=〉null
$rawTest
=〉false
> bin/console some:cmd --test
$test
=〉null
$rawTest
=〉null
> bin/console some:cmd --test=something
$test
=〉"something"
$rawTest
=〉"something"
qc6wkl3g4#
出于某种原因,其他答案对我不起作用。对我有用的是: