控制台输入(参数和选项)
编辑该页面控制台输入(参数和选项)
最有趣的部分命令的参数和选项,您可以提供。这些参数和选项允许您通过动态信息终端的命令。
使用命令参数
参数的字符串-用空格分开后命令名称本身。他们命令,可以是可选的还是必需的。例如,添加一个可选的last_name
参数,使的命令的名字
参数要求:
1 2 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::可选的,“你的姓吗?”);}}
现在,您已经访问last_name
命令参数:
1 2 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美元输出):int{美元文本=“嗨”。美元输入- >getArgument (“名字”);美元姓=美元输入- >getArgument (“last_name”);如果(美元姓){美元文本=。' '。美元姓;}美元输出- >writeln (美元文本。“!”);返回命令::成功;}}
命令,现在可以用于以下方面:
1 2 3 4 5
美元php bin /控制台应用程序:问候法比你好法!美元php bin /控制台应用程序:问候法效力嗨法比力量!
也可以让一个参数的值列表(假设您希望迎接你的朋友)。只有最后一个参数是一个列表:
1 2 3 4 5 6 7 8
美元这/ /……- >addArgument (“名字”,InputArgument::IS_ARRAY,“你想问候(单独的多个名称空间)?”);
使用这个,指定你想要尽可能多的名字:
1
美元php bin /控制台应用程序:法比瑞安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 | InputArgument::必需的,“你想问候(单独的多个名称空间)?”);
使用命令选项
与参数,选项并不是命令(这意味着您可以指定任何顺序)和两个破折号(如指定。——大喊
)。选项是总是可选的,并且可以设置接受一个值(例如。- - - dir = src
)或一个布尔标志(如没有价值。——大喊
)。
例如,添加一个新选项的命令可以被用来指定多少次连续消息应该打印:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ /……使用ob娱乐下载\组件\控制台\输入\InputOption;美元这/ /……- >使用addOption (/ /这是类型名称,用户必须通过这个选项(例如,迭代= 5)“迭代”,/ /这是可选的选项的快捷方式的名称,通常只是一个字母/ /(如。“我”,所以用户通过“我”);使用常用的选项/ /或选项长名称零,/ /这是选择的类型(例如,需要一个值,可以通过不止一次,等等)。InputOption::VALUE_REQUIRED,/ /显示的选项描述当显示命令的帮助的消息应该打印多少次?”,/ /选项的默认值(对于那些允许通过值)1);
接下来,使用这个命令打印消息多次:
1 2 3
为(美元我=0;美元我<美元输入- >getOption (“迭代”);美元我+ +){美元输出- >writeln (美元文本);}
现在,当您运行这个命令,您可以指定一个——迭代
国旗:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#没有提供——迭代,默认使用的是(1)美元php bin /控制台应用程序:问候法比你好法!美元php bin /控制台应用程序:迎接法——迭代= 5嗨法!你好,法比安!你好,法比安!你好,法比安!你好,法比安!#选项的顺序并不重要美元php bin /控制台应用程序:迎接法比安-迭代= 5 -大喊美元php bin /控制台应用程序:问候法——大喊——迭代= 5美元php bin /控制台应用程序:问候——大喊——迭代= 5法比安
提示
你也可以声明一个字母的快捷方式,你可以叫一个破折号,-我
:
1 2 3 4 5 6 7 8 9 10
美元这/ /……- >使用addOption (“迭代”,“我”,InputOption::VALUE_REQUIRED,的消息应该打印多少次?”,1);
注意遵守docopt标准长选项可以指定一个空格或一个后他们的价值观=
(如迹象。——迭代5
或——迭代= 5
),但是短选项只能使用空格或任何分离(如。我5
或i5
)。
谨慎
虽然有可能单独一个选项从其价值的空白,使用这种形式会导致一个模棱两可的选项应该出现在命令名。例如,php bin /控制台——迭代5应用程序:欢迎法比安
是模糊的;ob娱乐下载Symfony会解释5
作为命令名称。为了避免这种情况,总是选择命令名后,或避免使用空间单独的选项名称的值。
有五个选项变量可以使用:
-
InputOption: VALUE_IS_ARRAY
-
这个选项接受多个值(如。
- - - dir = / foo - dir = /酒吧
); -
InputOption: VALUE_NONE
-
(如不接受输入的选项。
——大喊
)。返回的值是一个布尔(假
如果选择不提供)。这是默认的行为选项; -
InputOption: VALUE_REQUIRED
-
这个值是必需的(如。
——迭代= 5
或i5
),选择本身仍然是可选的; -
InputOption: VALUE_OPTIONAL
-
此选项可能有也可能没有一个值(例如
——大喊
或——大声喊=
)。 -
InputOption: VALUE_NEGATABLE
-
接受的标志(如。
——大喊
)或其否定(如——no-yell
)。
你需要把VALUE_IS_ARRAY
与VALUE_REQUIRED
或VALUE_OPTIONAL
是这样的:
1 2 3 4 5 6 7 8 9 10
美元这/ /……- >使用addOption (“颜色”,零,InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,“你喜欢哪个颜色?”,(“蓝”,“红色”]);
选项可选参数
没有禁止您创建一个命令的选项,选择接受一个值,但它是有点棘手。考虑一下这个例子:
1 2 3 4 5 6 7 8 9 10 11 12
/ /……使用ob娱乐下载\组件\控制台\输入\InputOption;美元这/ /……- >使用addOption (“喊”,零,InputOption::VALUE_OPTIONAL,“我应该问候的时候喊?”);
此选项可用于三个方面:问候,大喊
,问候——大喊=响亮
,问候
。然而,很难区分传递选项没有一个值(问候,大喊
),而不是通过选项(问候
)。
为了解决这个问题,你必须设置选项的默认值假
:
1 2 3 4 5 6 7 8 9 10 11 12 13
/ /……使用ob娱乐下载\组件\控制台\输入\InputOption;美元这/ /……- >使用addOption (“喊”,零,InputOption::VALUE_OPTIONAL,“我应该问候的时候喊?”,假/ /这是新的默认值,而不是null);
现在可以区分不传递选项,而不是通过任何价值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
美元用optionValue=美元输入- >getOption (“喊”);如果(假= = =美元用optionValue){/ /在这种情况下,选择时没有通过运行命令美元大喊=假;美元yellLouder=假;}elseif(零= = =美元用optionValue){/ /在这种情况下,可以通过在运行该命令/ /但没有价值了美元大喊=真正的;美元yellLouder=假;}其他的{/ /在这种情况下,可以通过在运行命令/ /给它一些特定的价值美元大喊=真正的;如果(“声音”= = =美元用optionValue){美元yellLouder=真正的;}其他的{美元yellLouder=假;}}
上面的代码可以简化如下,因为假! = = null
:
1 2 3
美元用optionValue=美元输入- >getOption (“喊”);美元大喊= (美元用optionValue= = !假);美元yellLouder= (美元用optionValue= = =“声音”);
添加参数/选项值完成
如果控制台安装完成、命令和选项名称将自动完成壳。然而,你也可以实现对输入值完成你的命令。例如,您可能想要完成所有从数据库用户名的名字
论证你的问候命令。
为了达到这个目标,使用5参数addArgument ()
/使用addOption
:
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 31
/ /……使用ob娱乐下载\组件\控制台\完成\CompletionInput;使用ob娱乐下载\组件\控制台\完成\CompletionSuggestions;类GreetCommand扩展命令{/ /……受保护的函数配置():无效{美元这- >addArgument (“名字”,InputArgument::IS_ARRAY,“你想问候(单独的多个名称空间)?”,零,函数(CompletionInput美元输入){/ /用户已经输入的值,例如,当输入“应用:迎接Fa”之前/ /按选项卡,这将包含“Fa”美元currentValue=美元输入- >getCompletionValue ();/ /从别的地方得到的用户名名单(如数据库)/ /可以使用美元currentValue过滤的名字美元availableUsernames=……;/ /显示用户名作为值返回美元availableUsernames;});}}
6.1
的参数使用addOption ()
/addArgument ()
是在Symfony 6.1中引入的。ob娱乐下载在这个版本之前,你必须覆盖完成()
命令的方法。
这是你所需要的!假设用户“法”和“法布里斯”存在,输入后按选项卡应用:问候足总
会给你这些名字作为一个建议。
提示
shell脚本能够处理大量的建议,会自动过滤建议值基于现有的来自用户的输入。你不需要实现任何过滤逻辑命令。
你可以用CompletionInput: getCompletionValue ()
获取当前输入如果帮助提高性能(例如,通过减少从数据库获取的行数)。
完成测试脚本
控制台带有一个特殊的组件CommandCompletionTester单元测试的类来帮助你完成逻辑:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ /……使用ob娱乐下载\组件\控制台\应用程序;类GreetCommandTest扩展TestCase{公共函数testComplete(){美元应用程序=新应用程序();美元应用程序- >add (新GreetCommand ());/ /创建一个新的测试人员迎接命令美元测试人员=新CommandCompletionTester (美元应用程序- >get (应用:问候的));/ /完成输入没有任何现有的输入(空字符串表示/ /光标的位置)美元建议=美元测试人员- >完成([”]);美元这- >assertSame ([“法”,“法布里斯”,“Wouter”),美元建议);/ /完成输入与“Fa”作为输入美元建议=美元测试人员- >完成([“足”]);美元这- >assertSame ([“法”,“法布里斯”),美元建议);}}