Індикатор прогресу

Дата оновлення перекладу 2023-08-21

Індикатор прогресу

Індикатори прогресу корисні для того, щоб користувачі знали, що команда не зупинилася. На відміну від індикаторів виконання, ці індикатори використовуються, коли тривалість виконання команди є невизначеною (наприклад, довготривалі команди, завдання з невизначеною тривалістю тощо).

Вони працюють шляхом інстанціювання класу ProgressIndicator` і відстежують прогрес при виконанні команди:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use Symfony\Component\Console\Helper\ProgressIndicator;

// створює новий індикатор прогресу
$progressIndicator = new ProgressIndicator($output);

// запускає та відображає індикатор прогресу з користувацьким повідомленням
$progressIndicator->start('Processing...');

$i = 0;
while ($i++ < 50) {
    // ... зробти якусь роботу

    // просуває індикатор прогресу
    $progressIndicator->advance();
}

// гарантує, що індикатор прогресу відобразить фінальне повідомлення
$progressIndicator->finish('Finished');

Налаштування індикатору прогресу

Вбудовані формати

За замовчуванням, інформація, відображена на індикаторі прогресу, залежить від поточного рівня деталізації екземпляру OutputInterface:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# OutputInterface::VERBOSITY_NORMAL (CLI без прапорця деталізації)
 \ Processing...
 | Processing...
 / Processing...
 - Processing...

# OutputInterface::VERBOSITY_VERBOSE (-v)
 \ Processing... (1 sec)
 | Processing... (1 sec)
 / Processing... (1 sec)
 - Processing... (1 sec)

# OutputInterface::VERBOSITY_VERY_VERBOSE (-vv) and OutputInterface::VERBOSITY_DEBUG (-vvv)
 \ Processing... (1 sec, 6.0 MiB)
 | Processing... (1 sec, 6.0 MiB)
 / Processing... (1 sec, 6.0 MiB)
 - Processing... (1 sec, 6.0 MiB)

Tip

Викличте команду з німим прапорцем (-q), щоб не відображати індикатор прогресу.

Замість того, щоб покладатися на режим деталізації поточної команди, ви також можете примусово встановити формат через другий аргумент конструктора ProgressIndicator:

1
$progressIndicator = new ProgressIndicator($output, 'verbose');

Вбудовані формати наступні:

  • normal
  • verbose
  • very_verbose

Якщо ваш термінал не підтримує ANSI, використайте варіанти no_ansi:

  • normal_no_ansi
  • verbose_no_ansi
  • very_verbose_no_ansi

Користувацькі значення індикатора

Замість використання вбудованих значень індикатора, ви також можете встановити власні:

1
$progressIndicator = new ProgressIndicator($output, 'verbose', 100, ['⠏', '⠛', '⠹', '⢸', '⣰', '⣤', '⣆', '⡇']);

Тепер індикатор прогресу виглядатиме так:

1
2
3
4
⠏ Processing...
⠛ Processing...
⠹ Processing...
⢸ Processing...

Налаштуйте заповнювачі

Індикатор прогресу використовує заповнювачі (ім'я, укладене у символ %) для визначення формату виведення. Ось список вбудованих заповнювачів:

  • indicator: Поточний індикатор;
  • elapsed: Час, що минув з моменту запуску індикатора прогресу;
  • memory: Поточне використання памʼяті;
  • message: використовується для відображення довільних повідомлень в індикаторі прогресу.

Наприклад, ось як ви можете налаштувати заповнювач message:

1
2
3
4
5
6
7
ProgressIndicator::setPlaceholderFormatterDefinition(
    'message',
    static function (ProgressIndicator $progressIndicator): string {
        // Повернути будь-який довільний рядок
        return 'My custom message';
    }
);

Note

Налаштування заповнювачів застосовується глобально, що означає, що це впливатиме на будь-який індикатор прогресу, відображений після виклику setPlaceholderFormatterDefinition().