Laravel 5.1 - 如何在进度条上设置消息

时间:2015-08-14 17:19:20

标签: php symfony laravel laravel-5.1 artisan

我正在尝试Laravel docs上提供的相同示例:

$(document).ready(function(){
    $(".todo-remove").on('click', function () { 
        alert('deleleeeeeeeeeeeeeeeeee');
    });
});

这很有效。我想自定义进度条(请参阅this),但$users = App\User::all(); $this->output->progressStart(count($users)); foreach ($users as $user) { print "$user->name\n"; $this->output->progressAdvance(); } $this->output->progressFinish(); 给出:

$this->output->setMessage('xpto');

1 个答案:

答案 0 :(得分:20)

$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()来救援!

然而,有一个名为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();

希望它有所帮助。 ;)