的$this->output
对象的Symfony的Symfony\Component\Console\Style\SymfonyStyle
,它提供了方法progressStart()
,progressAdvance()
和progressFinish()
的实例。
的progressStart()
方法动态创建Symfony\Component\Console\Helper\ProgressBar
对象的实例,并将其添加到您的输出对象,这样你就可以使用progressAdvance()
和progressFinish()
操纵它。
可惜的是,Symfony的家伙决定保留两个$progressBar
财产和getProgressBar()
方法为私有,所以直接通过您的输出对象,如果你使用progressStart()
启动它,你不能访问的实际进度情况。
createProgressBar()来拯救!
但是,有一种非常酷的未记录方法,称为createProgressBar($max)
,它返回一个闪亮的全新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();
希望它有帮助。 ;)
完美答案! – Christopher
我收到错误'调用未定义的方法UsersTableSeeder :: info()'和'未定义的属性:UsersTableSeeder :: $ output'。什么即时做错了? – kuchar