控制台输入(参数和选项)
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
控制台输入(参数和选项)
命令中最有趣的部分是可以使用的参数和选项。这些参数和选项允许您从终端向命令传递动态信息。
使用命令参数
参数是命令名称本身后面的字符串(由空格分隔)。它们是有序的,可以是可选的,也可以是必需的。例如,添加一个可选选项last_name
参数,并使的名字
参数要求:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ /……使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputArgument;类GreetCommand扩展命令{/ /……受保护的函数配置(){$这/ /……->addArgument (“名字”, InputArgument::必需的,“你想和谁打招呼?”)->addArgument (“last_name”, InputArgument::可选的,“你姓什么?”);}}
您现在可以访问alast_name
命令中的参数:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ /……使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;类GreetCommand扩展命令{/ /……受保护的函数执行(InputInterface$输入, OutputInterface$输出){$文本=“嗨”.$输入->getArgument (“名字”);$姓=$输入->getArgument (“last_name”);如果($姓) {$文本=。' '.$姓;}$输出->writeln ($文本.“!”);返回命令::成功;}}
该命令现在可以以以下两种方式使用:
1 2 3 4 5
$php bin/控制台应用程序:你好Fabien!$你好Fabien Potencier!
也可以让一个参数接受一个值列表(假设你想问候你所有的朋友)。只有最后一个参数可以是一个列表:
1 2 3 4 5 6 7 8
$这/ /……->addArgument (“名字”, InputArgument::IS_ARRAY,“你想和谁打招呼(多个名字用空格隔开)?”);
要使用它,请指定尽可能多的名称:
1
$php bin/控制台应用程序:欢迎Fabien Ryan Bernhard
您可以访问的名字
参数作为数组:
1 2 3 4
$的名字=$输入->getArgument (“名字”);如果(数($的名字) >0) {$文本=。' '.implode (”、“,$的名字);}
你可以使用三种参数变体:
-
InputArgument:需要
- 这个论证是强制性的。如果没有提供参数,命令不会运行;
-
InputArgument::可选
- 参数是可选的,因此可以省略。这是参数的默认行为;
-
InputArgument: IS_ARRAY
- 参数可以包含任意数量的值。因此,它必须用于参数列表的末尾。
你可以结合IS_ARRAY
与要求
或可选
是这样的:
1 2 3 4 5 6 7 8
$这/ /……->addArgument (“名字”, InputArgument::IS_ARRAY |输入数据::必需的,“你想和谁打招呼(多个名字用空格隔开)?”);
使用命令选项
与参数不同,选项是没有顺序的(这意味着您可以以任何顺序指定它们),并且用两个破折号指定(例如。——大喊
).选项是总是可选的,可以设置为接受一个值(例如。- - - dir = src
)或作为一个布尔标志而不带值(例如:——大喊
).
例如,在命令中添加一个新选项,用于指定消息在一行中应该打印多少次:
12 3 4 5 6 7 8 9 10 11 12 13
/ /……使用ob娱乐下载\组件\控制台\输入\InputOption;$这/ /……->使用addOption (“迭代”,零, InputOption::VALUE_REQUIRED,“这条信息应该打印几次?”,1);
接下来,在命令中使用this多次打印消息:
1 2 3
为($我=0;$我<$输入->getOption (“迭代”);$我+ +) {$输出->writeln ($文本);}
现在,当您运行该命令时,您可以选择指定——迭代
国旗:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
# no——提供的迭代,使用默认值(1)$php bin/控制台应用程序:你好Fabien!$php bin/console app:greet Fabien—iterations=5 Hi Fabien!你好,法比安!你好,法比安!你好,法比安!你好,法比安!选项的顺序并不重要$php bin/控制台应用程序:问候Fabien—迭代=5—大喊$php bin/控制台应用程序:greet Fabien—yell—iterations=5$php bin/console app:greet——yell——iterations=5 Fabien . php bin/console app:greet——yell——iterations=5 Fabien . php
提示
您还可以声明一个单字母的快捷方式,可以用一个破折号调用,例如-我
:
1 2 3 4 5 6 7 8 9 10
$这/ /……->使用addOption (“迭代”,“我”, InputOption::VALUE_REQUIRED,“这条信息应该打印几次?”,1);
注意,要遵守docopt标准,则长选项可以在空格或=
(如迹象。——迭代5
或——迭代= 5
),但短选项只能使用空格或不使用分隔符(例如:我5
或i5
).
谨慎
虽然可以使用空格将选项与其值分开,但如果选项出现在命令名之前,则使用这种形式会导致歧义。例如,php bin/console——迭代5应用程序:问候Fabien
是模糊的;ob娱乐下载Symfony会解释5
作为命令名。要避免这种情况,请始终将选项放在命令名之后,或者避免使用空格将选项名与其值分隔开。
有四个选项变体你可以使用:
-
InputOption: VALUE_IS_ARRAY
-
该选项接受多个值(例如:
- - - dir = / foo - dir = /酒吧
); -
InputOption: VALUE_NONE
-
不接受此选项的输入(例如:
——大喊
).这是选项的默认行为; -
InputOption: VALUE_REQUIRED
-
这个值是必需的(例如:
——迭代= 5
或i5
),该选项本身仍然是可选的; -
InputOption: VALUE_OPTIONAL
-
这个选项可能有值,也可能没有值(例如:
——大喊
或——大声喊=
).
你可以结合VALUE_IS_ARRAY
与VALUE_REQUIRED
或VALUE_OPTIONAL
是这样的:
1 2 3 4 5 6 7 8 9 10
$这/ /……->使用addOption (“颜色”,零, InputOption::VALUE_REQUIRED |输入::VALUE_IS_ARRAY,“你喜欢什么颜色?”, (“蓝”,“红色”]);
带有可选参数的选项
没有什么禁止您创建带有可选接受值的选项的命令,但这有点棘手。想想这个例子:
12 3 4 5 6 7 8 9 10 11 12
/ /……使用ob娱乐下载\组件\控制台\输入\InputOption;$这/ /……->使用addOption (“喊”,零, InputOption::VALUE_OPTIONAL,“我应该在打招呼的时候大喊吗?”);
这个选项可以通过3种方式使用:问候,大喊
,问候——大喊=响亮
,问候
.然而,很难区分传递不带值的选项(问候,大喊
),而不传递选项(问候
).
要解决此问题,必须将该选项的默认值设置为假
:
12 3 4 5 6 7 8 9 10 11 12 13
/ /……使用ob娱乐下载\组件\控制台\输入\InputOption;$这/ /……->使用addOption (“喊”,零, InputOption::VALUE_OPTIONAL,“我应该在打招呼的时候大喊吗?”,假//这是新的默认值,而不是null);
现在可以区分不传递选项和不传递它的任何值:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
$用optionValue=$输入->getOption (“喊”);如果(假===$用optionValue) {//在这种情况下,运行命令时不传递该选项$大喊=假;$yellLouder=假;}elseif(零===$用optionValue) {//在这种情况下,该选项在运行命令时被传递//但是没有给它赋值$大喊=真正的;$yellLouder=假;}其他的{//在这种情况下,该选项在运行命令和时被传递//给它一个特定的值$大喊=真正的;如果(“声音”===$用optionValue) {$yellLouder=真正的;}其他的{$yellLouder=假;}}
上面的代码可以简化如下,因为False !== null
:
1 2 3
$用optionValue=$输入->getOption (“喊”);$大喊= ($用optionValue= = !假);$yellLouder= ($用optionValue===“声音”);