Использование Symfony индикатор выполнения, не зная заранее точное количество шагов - PullRequest
1 голос
/ 21 апреля 2020

У меня есть этот пример того, как использовать Symfony progress bar помощник

protected function execute(InputInterface $input, OutputInterface $output)
    {
    // Fake data source
    $customers = [
    ['John Doe', 'john.doe@mail.loc', '1983-01-16'],
    ['Samantha Smith', 'samantha.smith@mail.loc', '1986-10-23'],
    ['Robert Black', 'robert.black@mail.loc', '1978-11-18'],
    ];
    // Progress Bar Helper
    $progress = new
    \Symfony\Component\Console\Helper\ProgressBar($output,
    count($customers));
    $progress->start();
    for ($i = 1; $i <= count($customers); $i++) {
    sleep(5);
    $progress->advance();
    }
    $progress->finish();
    // Table Helper
    $table = new \Symfony\Component\Console\Helper\Table($output);
    $table->setHeaders(['Name', 'Email', 'DON'])
    ->setRows($customers)
    ->render();
    }

Теперь, в приведенном выше примере, я смог заранее знать общее количество customers, которое будет экспортировать, используя count(customers) в качестве второго аргумента progress bar.

Теперь я создаю сценарий, который должен был загрузить удаленный файл, и я понятия не имею, сколько времени это займет или какие шаги нужно предпринять, чтобы завершить загрузку.

У меня вопрос, как Могу ли я создать такой сценарий, если я заранее не знаю, сколько шагов будет предпринято?

Примечание: все примеры, которые я видел здесь и в других местах, редко (если вообще) упоминают, что

1 Ответ

1 голос
/ 21 апреля 2020

Если вы заранее не знаете точное количество шагов, установите разумное значение, а затем вызовите метод setMaxSteps(), чтобы обновить его при необходимости:

$progressBar = new ProgressBar($output, 50);

// a complex task has just been created: increase the progressbar to 200 units
$progressBar->setMaxSteps(200);

или

$progressBar = new ProgressBar($output);

Ход будет отображаться как пульсатор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...