我想使用一系列简单的点来显示处理进度。这在浏览器中很容易,只需要echo '.'
并且它在同一行,但是如何在向artisan命令行发送数据时在同一行上执行此操作?
每次对$this->info('.')
的调用都会将点放在一个新行上。
答案 0 :(得分:18)
可能只是一个主题,因为你只想要一系列的点。但是,您可以使用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();
更新:对于Laravel 5.1 + 更简单的语法更方便:
$bar = $this->output->createProgressBar(count($foo));
$bar->advance();
$bar->finish();
答案 1 :(得分:15)
info 方法使用 writeln ,最后添加换行符,需要使用 write 。
//in your command
$this->output->write('my inline message', false);
$this->output->write('my inline message continues', false);
答案 2 :(得分:7)
如果您查看来源,您会看到$this->info
实际上只是$this->output->writeln
的快捷方式:Source。
您可以使用$this->output->write('<info>.</info>')
将其设为内嵌。
如果您发现自己经常使用此方法,您可以制作自己的辅助方法,如:
public function inlineInfo($string)
{
$this->output->write("<info>$string</info>");
}