菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2581
0

问题 可以在Artisan命令中设置进度条么? 回答

原创
05/13 14:22
阅读数 1291

问题

可以在 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();

效果:

命令行进度条

参考

发表评论

0/200
2581 点赞
0 评论
收藏
为你推荐 换一批