Note:因为Laravel 5.5,你应该使用$this->command->getOutput()
而不是$this->output
.
$this->output
对象是Symfony Symfony\Component\Console\Style\SymfonyStyle
的一个实例,它提供了方法progressStart()
、progressAdvance()
和progressFinish()
.
progressStart()
方法动态创建Symfony\Component\Console\Helper\ProgressBar
对象的一个实例,并将其附加到输出对象中,因此可以使用progressAdvance()
和progressFinish()
对其进行操作.
不幸的是,Symfony的家伙们决定将$progressBar
属性和getProgressBar()
方法都保留为私有,因此如果使用progressStart()
启动,就无法通过输出对象直接访问实际的ProgressBar实例.
createProgressBar() to the rescue!
然而,有一个很酷的未记录方法称为createProgressBar($max)
,它会返回一个shiny 的全新ProgressBar对象,供您使用.
所以,你可以这样做:
$progress = this->output->createProgressBar(100);
用你提供的Symfony's docs页做任何你想做的事.例如:
$this->info("Creating progress bar...\n");
$progress = $this->output->createProgressBar(100);
$progress->setFormat("%message%\n %current%/%max% [%bar%] %percent:3s%%");
$progress->setMessage("100? I won't count all that!");
$progress->setProgress(60);
for ($i = 0;$i<40;$i++) {
sleep(1);
if ($i == 90) $progress->setMessage('almost there...');
$progress->advance();
}
$progress->finish();
希望有帮助