感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
要理解console程序的参数处理方式是比较困难的。Symfony Console application,像很多其他的CLI工具一样,遵循的是 docopt 标准中所描述的行为。
看看下面这个拥有三个选项的命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | namespace Acme\Console\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class DemoArgsCommand extends Command
{
protected function configure()
{
$this
->setName('demo:args')
->setDescription('Describe args behaviors')
->setDefinition(
new InputDefinition(array(
new InputOption('foo', 'f'),
new InputOption('bar', 'b', InputOption::VALUE_REQUIRED),
new InputOption('cat', 'c', InputOption::VALUE_OPTIONAL),
))
);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// ...
}
} |
由于 foo
选项并不接收一个值,它将是 false
(若它未传入命令)或 true
(当--foo
被用户传入)。bar
选项的值(以及它的 b
快捷方式)是必填项。它(该值)可以从选项名称中以空格或=
字符给分离出来。cat
选项(连同其 c
快捷方式)的表现是类似的,但它并非必填项因此不需要一个值。看一眼下面的列表,了解传入的选项的可能组合方式:
Input | foo |
bar |
cat |
---|---|---|---|
--bar=Hello |
false |
"Hello" |
null |
--bar Hello |
false |
"Hello" |
null |
-b=Hello |
false |
"=Hello" |
null |
-b Hello |
false |
"Hello" |
null |
-bHello |
false |
"Hello" |
null |
-fcWorld -b Hello |
true |
"Hello" |
"World" |
-cfWorld -b Hello |
false |
"Hello" |
"fWorld" |
-cbWorld |
false |
null |
"bWorld" |
当命令也接收一个可选参数时,事情变得更加复杂:
1 2 3 4 5 6 7 | // ...
new InputDefinition(array(
// ...
new InputArgument('arg', InputArgument::OPTIONAL),
));
|
你可能已经使用了特殊的 --
分隔符来从参数中分离出选项。看一看下面列表中的第五行,这种用法告诉命令:World
是 arg
参数的值,而不是可选的 cat
选项的值:
Input | bar |
cat |
arg |
---|---|---|---|
--bar Hello |
"Hello" |
null |
null |
--bar Hello World |
"Hello" |
null |
"World" |
--bar "Hello World" |
"Hello World" |
null |
null |
--bar Hello --cat World |
"Hello" |
"World" |
null |
--bar Hello --cat -- World |
"Hello" |
null |
"World" |
-b Hello -c World |
"Hello" |
"World" |
null |
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。