Laravel 5.1 - 如何在进度条上设置消息
Laravel 5.1 - How to set a message on progress bar
我正在尝试 Laravel docs 中提供的相同示例:
$users = App\User::all();
$this->output->progressStart(count($users));
foreach ($users as $user) {
print "$user->name\n";
$this->output->progressAdvance();
}
$this->output->progressFinish();
这很管用。我想自定义进度条(参见 this)但 $this->output->setMessage('xpto');
给出:
PHP Fatal error: Call to undefined method Illuminate\Console\OutputStyle::setFormat()
Note: Since Laravel 5.5 you should use $this->command->getOutput()
instead of $this->output
.
$this->output
对象是Symfony的Symfony\Component\Console\Style\SymfonyStyle
的一个实例,它提供了方法progressStart()
、progressAdvance()
和progressFinish()
。
progressStart()
方法动态创建 Symfony\Component\Console\Helper\ProgressBar
对象的实例并将其附加到输出对象,因此您可以使用 progressAdvance()
和 progressFinish()
对其进行操作。
不幸的是,Symfony 的家伙们决定将 $progressBar
属性 和 getProgressBar()
方法都保留为私有的,因此如果您无法通过输出对象直接访问实际的 ProgressBar 实例使用 progressStart()
启动它。
createProgressBar() 拯救!
但是,有一个名为 createProgressBar($max)
的很酷的未记录方法,returns 你可以使用一个闪亮的全新 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();
希望对您有所帮助。 ;)
我正在尝试 Laravel docs 中提供的相同示例:
$users = App\User::all();
$this->output->progressStart(count($users));
foreach ($users as $user) {
print "$user->name\n";
$this->output->progressAdvance();
}
$this->output->progressFinish();
这很管用。我想自定义进度条(参见 this)但 $this->output->setMessage('xpto');
给出:
PHP Fatal error: Call to undefined method Illuminate\Console\OutputStyle::setFormat()
Note: Since Laravel 5.5 you should use
$this->command->getOutput()
instead of$this->output
.
$this->output
对象是Symfony的Symfony\Component\Console\Style\SymfonyStyle
的一个实例,它提供了方法progressStart()
、progressAdvance()
和progressFinish()
。
progressStart()
方法动态创建 Symfony\Component\Console\Helper\ProgressBar
对象的实例并将其附加到输出对象,因此您可以使用 progressAdvance()
和 progressFinish()
对其进行操作。
不幸的是,Symfony 的家伙们决定将 $progressBar
属性 和 getProgressBar()
方法都保留为私有的,因此如果您无法通过输出对象直接访问实际的 ProgressBar 实例使用 progressStart()
启动它。
createProgressBar() 拯救!
但是,有一个名为 createProgressBar($max)
的很酷的未记录方法,returns 你可以使用一个闪亮的全新 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();
希望对您有所帮助。 ;)