我想用一系列简单的点来显示处理进度。这在浏览器中很容易,只做echo '.'
,它在同一行,但是当我向artisan命令行发送数据时,我如何在同一行做到这一点?
随后对$this->info('.')
的每次调用都将点放在新行上。
方法info使用writeln,它在末尾添加一个换行符,您需要使用write
//in your command
$this->output->write('my inline message', false);
$this->output->write('my inline message continues', false);
可能有点主题,因为您只想要一系列点。但是你可以使用Laravel的内置功能在artisan命令中轻松地呈现进度条。
这样声明一个类变量:
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来完成进度:
$this->progressbar->finish();
更新:对于Laravel 5.1+更简单的语法更方便:
- 初始化
$bar = $this->output->createProgressBar(count($foo));
- Advance
$bar->advance();
- 完成
$bar->finish();
如果您查看源代码,您将看到$this->info
实际上只是$this->output->writeln
的快捷方式:source。
你可以使用$this->output->write('<info>.</info>')
来使它内联。
如果你发现自己经常使用这个方法,你可以创建自己的helper方法,如:
public function inlineInfo($string)
{
$this->output->write("<info>$string</info>");
}