Progress Helper
Progress HelperΒΆ
New in version 2.2: The progress
helper was introduced in Symfony 2.2.
New in version 2.3: The setCurrent
method was introduced in Symfony 2.3.
When executing longer-running commands, it may be helpful to show progress information, which updates as your command runs:

To display progress details, use the ProgressHelper
,
pass it a total number of units, and advance the progress as your command executes:
1 2 3 4 5 6 7 8 9 10 11 12 | $progress = $this->getHelper('progress');
$progress->start($output, 50);
$i = 0;
while ($i++ < 50) {
// ... do some work
// advance the progress bar 1 unit
$progress->advance();
}
$progress->finish();
|
Tip
You can also set the current progress by calling the
setCurrent()
method.
The appearance of the progress output can be customized as well, with a number of different levels of verbosity. Each of these displays different possible items - like percentage completion, a moving progress bar, or current/total information (e.g. 10/50):
1 2 3 4 5 6 7 | $progress->setFormat(ProgressHelper::FORMAT_QUIET);
$progress->setFormat(ProgressHelper::FORMAT_NORMAL);
$progress->setFormat(ProgressHelper::FORMAT_VERBOSE);
$progress->setFormat(ProgressHelper::FORMAT_QUIET_NOMAX);
// the default value
$progress->setFormat(ProgressHelper::FORMAT_NORMAL_NOMAX);
$progress->setFormat(ProgressHelper::FORMAT_VERBOSE_NOMAX);
|
You can also control the different characters and the width used for the progress bar:
1 2 3 4 5 6 | // the finished part of the bar
$progress->setBarCharacter('<comment>=</comment>');
// the unfinished part of the bar
$progress->setEmptyBarCharacter(' ');
$progress->setProgressCharacter('|');
$progress->setBarWidth(50);
|
To see other available options, check the API documentation for
ProgressHelper
.
Caution
For performance reasons, be careful if you set the total number of steps
to a high number. For example, if you're iterating over a large number of
items, consider setting the redraw frequency to a higher value by calling
setRedrawFrequency()
,
so it updates on only some iterations:
1 2 3 4 5 6 7 8 9 10 11 | $progress->start($output, 50000);
// update every 100 iterations
$progress->setRedrawFrequency(100);
$i = 0;
while ($i++ < 50000) {
// ... do some work
$progress->advance();
}
|
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.