进度条

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.7,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

进度条

当执行执行长时间运行的命令,它可能有助于显示进度信息,更新你的命令运行:

显示进展细节,使用ProgressBar,通过它的单位总数,并推进进度执行命令:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
使用欧宝娱乐app下载地址\组件\控制台\助手\ProgressBar;/ /创建一个新的进度条(50单位)美元progressBar=ProgressBar (美元输出,50);/ /启动并显示进度条美元progressBar- >开始();美元=0;(美元+ + <50){/ /……做一些工作/ /进度条1单位美元progressBar- >提前();/ /你也可以提前超过一个单位的进度条/ / $ progressBar - >进步(3);}/ /确保进度条为100%美元progressBar- >完成();

而不是推进(酒吧的步骤提前()方法),您也可以通过调用设置当前进展setProgress ()方法。

2.6

setProgress ()方法被称为setCurrent ()Symfony 2欧宝娱乐app下载地址.6之前。

谨慎

在版本2.6之前,进度条只如果你的平台支持ANSI编码工作;在其他平台上,不生成输出。

提示

如果你的平台不支持ANSI编码,更新进度条添加新行。为了防止被淹没的输出,调整setRedrawFrequency ()相应的行动。默认情况下,当使用马克斯,重绘频率设置10%你的马克斯

2.6

setRedrawFrequency ()方法是在Symfony 2.6中引入的。欧宝娱乐app下载地址

如果你不知道提前的步数,只是省略参数在创建的步骤ProgressBar实例:

1
美元progressBar=ProgressBar (美元输出);

的进展将被显示为一个动态浏览图示:

1 2 3 4 5 6 7 8 9
#没有马克斯步骤(显示像throbber) 0(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -) 5(- - - - - - > - - - - - - - - - - - - - - - - - - - - - - -) 5(= = = = = = = = = = = = = = = = = = = = = = = = = = = =] #马克斯步骤定义0/3 (> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]0% 1/3 (= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 3/3 [= = = = = = = = = = = = = = = = = = = = = = = = = = = =)100%

当你的任务完成后,别忘了打电话完成()为了确保进度条显示刷新完成100%。

请注意

如果你想要输出的东西在进度条时,调用clear ()第一。在你完成之后,调用显示()再次显示进度条。

自定义进度条

内置的格式

默认情况下,信息呈现在一个进度条取决于当前的冗长的水平OutputInterface实例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# OutputInterface: VERBOSITY_NORMAL (CLI没有冗长的旗帜)0/3 (> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]0% 1/3 (= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 3/3 [= = = = = = = = = = = = = = = = = = = = = = = = = = = =]100% # OutputInterface:: VERBOSITY_VERBOSE (- v) 0/3(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -] 0% 1秒1/3(= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 1秒3/3[= = = = = = = = = = = = = = = = = = = = = = = = = = = =]100% 1秒# OutputInterface:: VERBOSITY_VERY_VERBOSE (vv) 0/3(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -] 0% 1秒1/3(= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 1秒3/3[= = = = = = = = = = = = = = = = = = = = = = = = = = = =]100% 1秒# OutputInterface:: VERBOSITY_DEBUG (-vvv) 0/3(> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -] 0% 1秒/ 1秒1.0 MB 1/3(= = = = = = = = = > - - - - - - - - - - - - - - - - - -] 33% 1秒/ 1秒1.0 MB 3/3[= = = = = = = = = = = = = = = = = = = = = = = = = = = =] 100% 1秒/ 1秒1.0 MB

请注意

如果你叫一个命令与安静的标志(q),进度条不会显示出来。

而不是依靠冗长的当前模式命令,您还可以通过强制格式setFormat ():

1
美元progressBar- >setFormat (“详细”);

内置的格式如下:

  • 正常的
  • 详细的
  • very_verbose
  • 调试

如果你不为你的进度条设置步骤的数量,使用_nomax变体:

  • normal_nomax
  • verbose_nomax
  • very_verbose_nomax
  • debug_nomax

自定义格式

而不是使用内置的格式,你也可以设置自己的:

1
美元progressBar- >setFormat (“%酒吧%”);

这个格式设置为只显示进度条本身:

1 2 3
> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = = = = = = = = = > - - - - - - - - - - - - - - - - - - = = = = = = = = = = = = = = = = = = = = = = = = = = = =

一个进度条的格式是一个字符串,其中包含封闭与特定的占位符(一个名称%字符);的占位符替换基于当前进展。这是一个内置的占位符的列表:

  • 当前的:当前步骤;
  • 马克斯:步骤的最大数量(或0如果没有定义的最大值);
  • 酒吧:酒吧本身;
  • 百分比:完成的百分比(没有如果没有定义的最大值);
  • 运行:时间开始以来的进度条;
  • 剩下的:剩下的时间来完成任务(没有如果没有定义的最大值);
  • 估计:预计完成任务时间(没有如果没有定义的最大值);
  • 内存:当前内存使用量;
  • 消息:用来显示进度条中的任意消息(稍后解释)。

例如,下面是如何设置的格式是一样的调试一:

1
美元progressBar- >setFormat (' %电流最大% / % %(%酒吧%)% %:3 s % % %时间:6 s % / %估计:6 s % %记忆:6 s %’);

注意到:6部分添加到一些占位符吗?这就是你可以调整栏的外观(格式和对齐)。冒号后面的部分(:)是用于设置sprintf格式的字符串。

而不是设置一个进度条的格式对于一个给定的实例,您还可以定义全球格式:

1 2 3 4
ProgressBar::setFormatDefinition (“最低”,的进展:% % % %);美元progressBar=ProgressBar (美元输出,3);美元progressBar- >setFormat (“最低”);

这段代码定义了一个新的最小的格式,你可以使用你的进度条:

1 2 3
进展:0%进度:33%进度:100%

提示

它几乎总是更好的重新定义内置格式而不是创造新的角色,允许显示自动改变基于命令的冗长的旗帜。

当定义一个新的风格,包含占位符,只可用已知的最大数量的步骤时,您应该创建一个_nomax变体:

1 2 3 4 5
ProgressBar::setFormatDefinition (“最低”,“剩下的% % % % % %”);ProgressBar::setFormatDefinition (“minimal_nomax”,% % % %的);美元progressBar=ProgressBar (美元输出);美元progressBar- >setFormat (“最低”);

显示进度条时,将自动设置的格式minimal_nomax如果酒吧没有像在上面的示例中最大数量的步骤。

提示

可以包含任何有效的ANSI编码和格式设置颜色还可以使用Symfony-specific方式:欧宝娱乐app下载地址

1 2 3 4
ProgressBar::setFormatDefinition (“最低”,' <信息> % % % > < /信息\ [32 m % 033 \ 033 [0 < fg =白色;bg =蓝色> %剩下% < / > ');

请注意

格式可以跨越多个行;这是非常有用的,当你想要显示更多的上下文信息和进度条(见本文的示例)。

栏设置

在占位符,酒吧有点特殊的字符用于显示它可以定制:

1 2 3 4 5 6 7 8 9 10 11
/ /完成的酒吧的一部分美元progressBar- >setBarCharacter (“<评论> = < /评论>”);/ /未完成部分的酒吧美元progressBar- >setEmptyBarCharacter (' ');/ /字符的进展美元progressBar- >setProgressCharacter (“|”);/ /栏的宽度美元progressBar- >setBarWidth (50);

谨慎

由于性能原因,小心如果你设置步骤,大量的总数。举个例子,如果你是遍历大量物品,考虑设置重绘通过调用频率更高的价值setRedrawFrequency (),所以它只更新一些迭代:

1 2 3 4 5 6 7 8 9 10 11 12
美元progressBar=ProgressBar (美元输出,50000年);美元progressBar- >开始();/ /每100次迭代更新美元progressBar- >setRedrawFrequency (One hundred.);美元=0;(美元+ + <50000年){/ /……做一些工作美元progressBar- >提前();}

自定义占位符

如果你想显示一些信息,取决于进度条显示没有可用的列表中内置的占位符,您可以创建自己的。让我们看看如何创建一个remaining_steps占位符的数量显示剩余的步骤:

1 2 3 4 5 6
ProgressBar::setPlaceholderFormatterDefinition (“remaining_steps”,函数(ProgressBar美元progressBar,OutputInterface美元输出){返回美元progressBar- >getMaxSteps () -美元progressBar- >getProgress ();});

2.6

getProgress ()方法被称为getStep ()Symfony 2欧宝娱乐app下载地址.6之前。

自定义消息

进度条定义一个占位符消息显示任意的消息。然而,没有一个内置格式包括占位符,在显示这些信息之前,您必须定义自己的自定义格式:

1 2 3 4
ProgressBar::setFormatDefinition (“自定义”,' %电流最大% / % % % - %消息”);美元progressBar=ProgressBar (美元输出,One hundred.);美元progressBar- >setFormat (“自定义”);

现在,使用setMessage ()方法设置的值%消息%占位符之前显示进度条:

1 2 3 4 5 6 7 8
/ /……美元progressBar- >setMessage (“开始”);美元progressBar- >开始();/ / 0/100——开始美元progressBar- >提前();美元progressBar- >setMessage (“任务正在进行中…”);/ / 1/100——任务正在进行中……

消息可以结合自定义占位符。在这个例子中,进度条使用%消息%%文件名%占位符:

1 2 3 4
ProgressBar::setFormatDefinition (“自定义”,' %电流最大% / % % % - %消息文件名(% %)”);美元progressBar=ProgressBar (美元输出,One hundred.);美元progressBar- >setFormat (“自定义”);

setMessage ()方法接受一个可选的参数设置的值定义占位符:

1 2 3 4 5 6 7 8
/ /……/ /数组$文件=(客户- 001 /发票。xml”、“…”);foreach(美元文件作为美元文件名){美元progressBar- >setMessage (“进口发票…”);美元progressBar- >setMessage (美元文件名,“文件名”);美元progressBar- >提前();/ / 2/100——进口发票…(客户端- 001 / invoices.xml)}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。