控制台输入(参数和选项)

编辑本页

警告:您正在浏览的文档欧宝官网下载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娱乐下载组件控制台输入InputArgumentGreetCommand扩展命令/ /……受保护的函数配置()/ /……->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娱乐下载组件控制台输出OutputInterfaceGreetCommand扩展命令/ /……受保护的函数执行(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=5php 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),但短选项只能使用空格或不使用分隔符(例如:我5i5).

谨慎

虽然可以使用空格将选项与其值分开,但如果选项出现在命令名之前,则使用这种形式会导致歧义。例如,php bin/console——迭代5应用程序:问候Fabien是模糊的;ob娱乐下载Symfony会解释5作为命令名。要避免这种情况,请始终将选项放在命令名之后,或者避免使用空格将选项名与其值分隔开。

有四个选项变体你可以使用:

InputOption: VALUE_IS_ARRAY
该选项接受多个值(例如:- - - dir = / foo - dir = /酒吧);
InputOption: VALUE_NONE
不接受此选项的输入(例如:——大喊).这是选项的默认行为;
InputOption: VALUE_REQUIRED
这个值是必需的(例如:——迭代= 5i5),该选项本身仍然是可选的;
InputOption: VALUE_OPTIONAL
这个选项可能有值,也可能没有值(例如:——大喊——大声喊=).

你可以结合VALUE_IS_ARRAYVALUE_REQUIREDVALUE_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===“声音”);
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。