进度条

编辑该页面

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

这个页面的更新版本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- >完成();

提示

你也可以回归进度条(即倒退)通过调用$进展- >提前()一个负值。例如,如果您的电话$进展- >发展(2)然后它将回归进度条2步骤。

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

提示

如果你的平台不支持ANSI编码,更新进度条添加新行。为了防止被淹没的输出,使用minSecondsBetweenRedraws ()重绘和数量限制的方法setRedrawFrequency ()每N迭代方法来重绘。默认情况下,重绘频率100毫秒10%你的马克斯

如果你不知道提前台阶的确切数字,将其设置为一个合理的值,然后调用setMaxSteps ()方法根据需要更新:

1 2 3 4 5
/ /开始progressbar 50台美元progressBar=ProgressBar (美元输出,50);/ /刚刚创建一个复杂的任务:提高progressbar至200辆美元progressBar- >setMaxSteps (200年);

另一个解决方案是省略参数在创建的步骤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 ()第一。在你完成之后,调用显示()再次显示进度条。

如果进展信息存储在一个iterable变量(如一个数组或一个PHP发生器)可以使用迭代()方法,它开始,进步和自动完成进度条:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
使用欧宝娱乐app下载地址\组件\控制台\助手\ProgressBar;美元progressBar=ProgressBar (美元输出);/ /美元iterable数组美元iterable= (1,2];foreach(美元progressBar- >迭代(美元iterable)作为美元价值){/ /……做一些工作}/ /或发电机函数iterable(){收益率1;收益率2;…};foreach(美元progressBar- >迭代(iterable ())作为美元价值){/ /……做一些工作}

前面的代码将输出:

1 2 3
0/2 (> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]0% 1/2 [= = = = = = = = = = = = = = > - - - - - - - - - - - - -]50% 2/2 [= = = = = = = = = = = = = = = = = = = = = = = = = = = =)100%

自定义进度条

内置的格式

默认情况下,信息呈现在一个进度条取决于当前的冗长的水平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秒1/3(= = = = = = = = = > - - - - - - - - - - - - - - - - - -]33% 1秒/ 1秒3/3[= = = = = = = = = = = = = = = = = = = = = = = = = = = =]100% 1秒/ 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);

谨慎

由于性能的原因,Symfony屏幕重绘每100毫秒欧宝娱乐app下载地址。如果这是太快或太慢对于您的应用程序,使用方法minSecondsBetweenRedraws ()maxSecondsBetweenRedraws ():

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
美元progressBar=ProgressBar (美元输出,50000年);美元progressBar- >开始();/ /这个屏幕重绘的每100次迭代,但设置额外的限制:/ /不重绘低于200毫秒(0.2)或超过100毫秒(0.1)美元progressBar- >setRedrawFrequency (One hundred.);美元progressBar- >maxSecondsBetweenRedraws (0.2);美元progressBar- >minSecondsBetweenRedraws (0.1);美元=0;(美元+ + <50000年){/ /……做一些工作美元progressBar- >提前();}

自定义占位符

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

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

自定义消息

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

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)}

多个显示进度条

当使用控制台输出部分可以同时显示多个进度条独立和改变他们的进步:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
美元section1=美元输出- >节();美元section2=美元输出- >节();美元progress1=ProgressBar (美元section1);美元progress2=ProgressBar (美元section2);美元progress1- >开始(One hundred.);美元progress2- >开始(One hundred.);美元=0;(+ +美元<One hundred.){美元progress1- >提前();如果(美元%2= = =0){美元progress2- >推进(4);}usleep (50000年);}

经过几次迭代后,输出的终端将会看起来像这样:

1 2
34/100 (= = = = = = = = = > - - - - - - - - - - - - - - - - - -]34% 68/100 [= = = = = = = = = = = = = = = = = = = > - - - - - - - - - -)68%
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。