如何风格一个控制台命令吗

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何风格一个控制台命令吗

在创建控制台命令时最无聊的任务之一是处理命令的输入和输出的样式。显示标题和表或用户提问涉及到大量重复的代码。

考虑例如代码用于显示的标题下面的命令:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/ / src /命令/ GreetCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;GreetCommand扩展命令{/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出):int{美元输出- >writeln ([' <信息> Lorem Ipsum悲哀坐Amet < / > ',' <信息> = = = = = = = = = = = = = = = = = = = = = = = = = = < / > ',]);/ /……}}

显示一个简单的标题需要三行代码,改变字体颜色,强调内容和标题后留下一个额外的空行。处理方式需要精心设计的命令,但它使他们不必要的代码。

为了减少样板代码,可以使用Symfony命令ob娱乐下载ob娱乐下载Symfony风格指南。这些样式被实现为一组允许创建的辅助方法语义命令和忘记他们的样式。

基本用法

在你的命令中,实例化ob娱乐下载SymfonyStyle类和通过输入美元输出美元变量作为参数。然后,您可以开始使用任何帮手,如标题(),它显示的标题命令:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/ / src /命令/ GreetCommand.php名称空间应用程序\命令;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;使用ob娱乐下载\组件\控制台\风格\ob娱乐下载SymfonyStyle;GreetCommand扩展命令{/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出):int{美元io=ob娱乐下载SymfonyStyle (美元输入,美元输出);美元io- >标题(“Lorem Ipsum悲哀坐Amet”);/ /……}}

辅助方法

ob娱乐下载SymfonyStyle类定义了一些辅助方法,涵盖最常见的由控制台命令的交互。

烫金方法

标题()

它显示给定字符串的命令名称。这种方法是使用只有一次在一个给定的命令,但没有阻止你使用它反复:

1
美元io- >标题(“Lorem ipsum悲哀坐amet”);
(节)

它显示给定字符串的标题一些命令部分。这是只需要在复杂的命令,想要更好的单独的内容:

1 2 3 4 5 6 7
美元io- >部分(“添加用户”);/ /……美元io- >部分(“生成密码”);/ /……

内容的方法

text ()

它显示给定的字符串或字符串数组作为普通文本。这是有用的为用户呈现帮助信息和指令运行命令:

1 2 3 4 5 6 7 8 9 10 11
/ /短信的使用简单的字符串美元io- >文本(“Lorem ipsum悲哀坐amet”);/ /……/ /显示长消息时考虑使用数组美元io- >文本([“Lorem ipsum悲哀坐amet”,“Consectetur adipiscing elit”,“Aenean坐amet arcu血液sem faucibus门”]);
清单()

它显示一个无序列表的元素作为一个数组传递:

1 2 3 4 5
美元io- >清单([“元素# 1 Lorem ipsum悲哀坐amet”,“元素# 2 Lorem ipsum悲哀坐amet”,“元素# 3 Lorem ipsum悲哀坐amet”]);
表()

它显示给定数组的标题和行作为一个紧凑的表:

1 2 3 4 5 6 7 8
美元io- >表([“标题1”,“标题2”],[[“细胞1 - 1”,“细胞1 - 2”]、[“细胞2 - 1”,“细胞2 - 2”]、[“细胞3 - 1”,“细胞3 - 2”)));
horizontalTable ()

它显示给定数组的标题和行作为一个紧凑的水平表:

1 2 3 4 5 6 7 8
美元io- >horizontalTable ([“标题1”,“标题2”],[[“细胞1 - 1”,“细胞1 - 2”]、[“细胞2 - 1”,“细胞2 - 2”]、[“细胞3 - 1”,“细胞3 - 2”)));
definitionList ()

它显示给定的键= >值对作为一个紧凑的列表元素:

1 2 3 4 5 6 7 8 9
美元io- >definitionList (“这是一个标题”,(“foo1”= >“bar1”]、[“foo2”= >“bar2”]、[“foo3”= >“bar3”),TableSeparator (),“这是另一个标题”,(“foo4”= >“bar4”]);
换行符()

它显示在命令输出一个空行。虽然它似乎有用,大多数时候你不需要它。原因在于,每一个助手已经增加了自己的空行,所以你不需要关心的垂直间距:

1 2 3 4 5
/ /输出一个空行美元io- >换行符();/ /输出三个连续的空行美元io- >换行符(3);

警告的方法

注意()

它显示给定的字符串或字符串数组作为警告。使用此辅助谨慎,以避免弄乱命令的输出:

1 2 3 4 5 6 7 8 9 10 11
/ /使用简单的字符串为简短的笔记美元io- >注意(“Lorem ipsum悲哀坐amet”);/ /……/ /显示长音时考虑使用数组美元io- >注意([“Lorem ipsum悲哀坐amet”,“Consectetur adipiscing elit”,“Aenean坐amet arcu血液sem faucibus门”]);
谨慎()

类似于注意()助手,但内容更突出强调。由此产生的内容就像一个错误消息,所以你应该避免使用这个帮手,除非必要:

1 2 3 4 5 6 7 8 9 10 11
/ /使用简单的字符串为短的警告消息美元io- >谨慎(“Lorem ipsum悲哀坐amet”);/ /……/ /显示长警告消息时考虑使用数组美元io- >谨慎([“Lorem ipsum悲哀坐amet”,“Consectetur adipiscing elit”,“Aenean坐amet arcu血液sem faucibus门”]);

进度条的方法

progressStart ()

它显示一个进度条的步数等于参数传递给方法(不通过任何价值如果进度条的长度是未知的):

1 2 3 4 5
/ /显示一个进度条未知的长度美元io- >progressStart ();/ /显示一个进度条100 -步长美元io- >progressStart (One hundred.);
progressAdvance ()

这让进度条(或预先给定数量的步骤1如果没有参数传递)步:

1 2 3 4 5
/ /进度条进步1步美元io- >progressAdvance ();/ /进度条10步进步美元io- >progressAdvance (10);
progressFinish ()

完成进度条(填满了所有剩下的步骤时其长度已知):

1
美元io- >progressFinish ();

用户输入方法

问()

它要求用户提供一些价值:

1
美元io- >问(“你叫什么名字?”);

你可以将默认值作为第二个参数传递,这样用户可以按<输入>键值的选择:

1
美元io- >问(“你从哪儿来的?”,“美国”);

如果你需要验证给定的值,通过一个回调确认器作为第三个参数:

1 2 3 4 5 6 7
美元io- >问(“工人数量开始”,1,函数(美元数量){如果(! is_numeric (美元数量)){\ RuntimeException (“你必须输入一个数字。”);}返回(int)美元数量;});
askHidden ()

它非常类似问()方法但将隐藏用户的输入并不能定义一个默认值。要求敏感信息时使用它:

1
美元io- >askHidden (“你的密码是什么?”);

如果你需要验证给定的值,通过一个回调确认器作为第二个参数:

1 2 3 4 5 6 7
美元io- >askHidden (“你的密码是什么?”,函数(美元密码){如果((美元密码)){\ RuntimeException (“密码不能是空的。”);}返回美元密码;});
确认()

这要求一个是/否的问题给用户,它只返回真正的:

1
美元io- >确认(“重新启动web服务器?”);

你可以将默认值作为第二个参数传递,这样用户可以按<输入>键值的选择:

1
美元io- >确认(“重新启动web服务器?”,真正的);
选择()

它提出一个问题的答案是限制给定有效答案列表:

1
美元io- >选择(“选择要分析的队列”,(“queue1”,“queue2”,“queue3”]);

你可以将默认值作为第三个参数传递,这样用户可以按<输入>键值的选择:

1
美元io- >选择(“选择要分析的队列”,(“queue1”,“queue2”,“queue3”),“queue1”);

结果的方法

成功()

它显示给定的字符串或字符串数组强调作为一个成功的消息(绿色背景(好的)标签)。这意味着使用一次显示最终结果执行给定的命令,但你可以用它反复在执行命令:

1 2 3 4 5 6 7 8 9 10
/ /使用简单的字符串简称成功消息美元io- >成功(“Lorem ipsum悲哀坐amet”);/ /……/ /考虑使用数组当显示成功信息美元io- >成功([“Lorem ipsum悲哀坐amet”,“Consectetur adipiscing elit”]);
信息()

这是相似的成功()方法(给定的字符串或字符串数组显示绿色背景),但(好的)标签不是前缀。它意味着使用一次显示最终结果执行给定的命令,没有显示结果作为一个成功或失败的一个:

1 2 3 4 5 6 7 8 9 10
/ /使用简单的短信息字符串信息美元io- >信息(“Lorem ipsum悲哀坐amet”);/ /……/ /显示长信息消息时考虑使用数组美元io- >信息([“Lorem ipsum悲哀坐amet”,“Consectetur adipiscing elit”]);

5.2

信息()方法是在Symfony 5.2中引入的。ob娱乐下载

警告()

它显示给定的字符串或字符串数组作为一个警告消息(红色突出显示背景和(警告)标签)。这意味着使用一次显示最终结果执行给定的命令,但你可以用它反复在执行命令:

1 2 3 4 5 6 7 8 9 10
/ /使用简单的字符串简称警告消息美元io- >警告(“Lorem ipsum悲哀坐amet”);/ /……/ /考虑使用数组当显示警告消息美元io- >警告([“Lorem ipsum悲哀坐amet”,“Consectetur adipiscing elit”]);
错误()

它显示给定的字符串或字符串数组高亮显示为一条错误消息(红色背景和(错误)标签)。这意味着使用一次显示最终结果执行给定的命令,但你可以用它反复在执行命令:

1 2 3 4 5 6 7 8 9 10
/ /使用简单的字符串错误消息美元io- >错误(“Lorem ipsum悲哀坐amet”);/ /……/ /考虑使用数组时显示错误消息美元io- >错误([“Lorem ipsum悲哀坐amet”,“Consectetur adipiscing elit”]);

定义你自己的风格

如果你不喜欢使用Symfony的命令的设计风格,您可以定义您自己的设置控制台的风格。ob娱乐下载创建一个类,它实现了StyleInterface:

1 2 3 4 5 6 7 8
名称空间应用程序\控制台;使用ob娱乐下载\组件\控制台\风格\StyleInterface;CustomStyle实现了StyleInterface{/ /……实现接口的方法}

然后,而不是默认的实例化这个自定义类ob娱乐下载SymfonyStyle在你的命令。多亏了StyleInterface你不需要改变你的命令的代码改变他们的外观:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ / src /命令/ GreetCommand.php名称空间应用程序\控制台;使用应用程序\控制台\CustomStyle;使用ob娱乐下载\组件\控制台\命令\命令;使用ob娱乐下载\组件\控制台\输入\InputInterface;使用ob娱乐下载\组件\控制台\输出\OutputInterface;GreetCommand扩展命令{/ /……受保护的函数执行(InputInterface美元输入,OutputInterface美元输出):int{/ /之前美元io=ob娱乐下载SymfonyStyle (美元输入,美元输出);/ /后美元io=CustomStyle (美元输入,美元输出);/ /……}}

写错误输出

如果你重用一个命令的输出作为输入的命令或转储到一个文件中,以备重用,你可能想要排除进度条,笔记和其他没有提供真正价值的输出。

命令可以在两个不同的流输出信息:stdout(标准输出)的流应该产出和实际内容stderr(标准误差)是流的错误