我想使用一系列简单的点来显示处理进度。这在浏览器中很容易,只需执行
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->progressbar->finish();
更新:适用于 Laravel 5.1+ 更简单的语法更方便:
$bar = $this->output->createProgressBar(count($foo));
$bar->advance();
$bar->finish();
如果你查看源代码,你会发现
$this->info
实际上只是$this->output->writeln
的快捷方式:Source。
您可以使用
$this->output->write('<info>.</info>')
使其内联。
如果您发现自己经常使用此方法,您可以制作自己的辅助方法,例如:
public function inlineInfo($string)
{
$this->output->write("<info>$string</info>");
}
是回车
是换行符
所以你可以使用:
echo "something\r";
例如,在同一行中写入以显示进度。之后您可以致电“
|