如何在同一行上显示Laravel工匠命令输出?
我想使用一系列简单的点来显示处理进度。这在浏览器中很容易,只需做,它就会在同一行上进行,但是在将数据发送到工匠命令行时,我如何在同一行上执行此操作?echo '.'
每个后续调用都将点放在新行上。$this->info('.')
我想使用一系列简单的点来显示处理进度。这在浏览器中很容易,只需做,它就会在同一行上进行,但是在将数据发送到工匠命令行时,我如何在同一行上执行此操作?echo '.'
每个后续调用都将点放在新行上。$this->info('.')
方法信息使用 writeln,它在末尾添加换行符,您需要使用 write 代替。
//in your command
$this->output->write('my inline message', false);
$this->output->write('my inline message continues', false);
可能有点主题,因为你只想要一系列点。但是,您可以使用Laravel中的内置功能轻松地在工匠命令中显示进度条。
声明一个类变量,如下所示:
protected $progressbar;
并像这样初始化进度条,让我们在fire()方法中说:
$this->progressbar = $this->getHelperSet()->get('progress');
$this->progressbar->start($this->output, Model::count());
然后做这样的事情:
foreach (Model::all() as $instance)
{
$this->progressbar->advance(); //do stuff before or after this
}
并在完成时通过调用以下命令来限定进度:
$this->progressbar->finish();
更新: 对于拉拉维尔 5.1+更简单的语法更方便:
$bar = $this->output->createProgressBar(count($foo));
$bar->advance();
$bar->finish();