Індикатор прогресу
Дата оновлення перекладу 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()
.