Laravel Artisan 命令行:命令行进度条 1 个改进

问题

可以在 Artisan 命令中设置进度条么?

回答

对于耗时任务,有进度条提示,用户体验会好很多。

下面,我们创建一个演示进度条基本用法的 demo:processbar 命令,源码如下:

Artisan::command('demo:processbar {--custom}', function ($custom) {
    $bar = $this->output->createProgressBar(10);

    if ($custom) {
        $bar->setBarCharacter('<comment>=</comment>');
        $bar->setEmptyBarCharacter(' ');
        $bar->setProgressCharacter('|');
        $bar->setBarWidth(50);        
    }

    $i = 0;

    do {
        sleep(1);    
        $bar->advance();       
    } while (++$i < 10);

    $bar->finish();
});

首先,我们用 output 对象创建一个进度条对象,创建的同时指定进度条的总步长。

$bar = $this->output->createProgressBar(10);

然后,可以对进度条进行定制,比如上面的命令在指定 --custom 选项后,会进行下列定制:

设置进度条已完成部分的字符(黄色 = 号):

$bar->setBarCharacter('<comment>=</comment>');

设置进度条未完成部分字符(空格字符):

$bar->setEmptyBarCharacter(' ');

设置进度指示字符:

$bar->setProgressCharacter('|');

设置进度条宽度:

$bar->setBarWidth(50);

更多定制项,请见 Symfony 进度条组件文档

然后,在命令执行过程中,更新进度条进度:

$bar->advance(); 

最后,任务执行完毕后,设置进度条完结。

$bar->finish();

效果:

命令行进度条

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!