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

标签 php laravel symfony laravel-5 laravel-artisan

我正在尝试与 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() 方法都保留为私有(private),因此您无法通过输出直接访问实际的 ProgressBar 实例对象,如果你使用 progressStart() 启动它。

createProgressBar() 助您一臂之力!

但是,有一个很酷的未记录方法,名为 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();

希望对您有所帮助。 ;)

关于php - Laravel - 如何在进度条上设置消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015511/

相关文章:

php - 用户的 Ratchet 存储连接和在服务器实异常(exception)发送消息

php - Prestashop 中的主页模板?在哪里?

javascript - 在同一页面中测试 Dart 和 dart2js 代码

php - 在 Laravel 5 中将文件附加到电子邮件

javascript - VueJS Router View react Prop 未定义

php - 使用 DomCrawler 获取数据属性

symfony - ORM expr 评估空字符串

php - 如何使用php或javascript获取所有浏览器中当前打开的标签的url?

php - 在不添加新记录的情况下获取下一个主键是不可能的,不是吗?

php - 如何使用 PHP 执行此 mysql 查询,然后随机化结果?