Новое в Symfony 4.3: Итерируемый прогресс бар

Обычный рабочий процесс для индикаторов прогресса 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%