Обычный рабочий процесс для индикаторов прогресса Symfony Console – их запуск, продвижение в соответствии с ходом выполнения задачи и завершение их:
use Symfony\Component\Console\Helper\ProgressBar;
$progressBar = new ProgressBar($output);
$progressBar->start();
// ... do some work
$progressBar->advance();
// needed to ensure that the bar reaches 100%
$progressBar->finish();
В Symfony 4.3 улучшили этот рабочий процесс, когда вы работаете с итеративными переменными (такими как массивы или генераторы). Благодаря новому методу iterate()
вы можете передавать итерируемую переменную, и индикатор выполнения запускается, перемещается и заканчивается автоматически.
Рассмотрим следующий простой генератор PHP:
$iterable = function () {
yield 1;
yield 2;
// ...
};
Вы можете превратить это в индикатор выполнения следующим образом:
use Symfony\Component\Console\Helper\ProgressBar;
$progressBar = new ProgressBar($output);
foreach ($progressBar->iterate($iterable) as $value) {
// ... do some work
}
Вывод в терминале будет следующим:
0/2 [>---------------------------] 0% 1/2 [==============>-------------] 50% 2/2 [============================] 100%