【问题标题】:Laravel 5.1 - How to set a message on progress barLaravel 5.1 - 如何在进度条上设置消息
【发布时间】:2015-11-08 00:45:14
【问题描述】:

我正在尝试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()

【问题讨论】:

    标签: php symfony laravel laravel-5.1 laravel-artisan


    【解决方案1】:

    注意:从 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() 来救援!

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

    希望对您有所帮助。 ;)

    【讨论】:

    • 我收到错误 Call to undefined method UsersTableSeeder::info()Undefined property: UsersTableSeeder::$output。我做错了什么?
    • 确认这适用于 Laravel 5.8... 解释 Laravel 的官方文档对我不起作用。首先使用 setFormat() 有效。
    • 在最新版本的 Laravel 中,你应该使用 $this-&gt;command-&gt;getOutput() 而不是 $this-&gt;output
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 2011-12-24
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    相关资源
    最近更新 更多