如何在同一行上显示Laravel工匠命令输出?

2022-08-30 22:42:34

我想使用一系列简单的点来显示处理进度。这在浏览器中很容易,只需做,它就会在同一行上进行,但是在将数据发送到工匠命令行时,我如何在同一行上执行此操作?echo '.'

每个后续调用都将点放在新行上。$this->info('.')


答案 1

方法信息使用 writeln,它在末尾添加换行符,您需要使用 write 代替。

//in your command
$this->output->write('my inline message', false);
$this->output->write('my inline message continues', false);

答案 2

可能有点主题,因为你只想要一系列点。但是,您可以使用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+更简单的语法更方便:

  1. 初始化$bar = $this->output->createProgressBar(count($foo));
  2. 进展$bar->advance();
  3. 完成$bar->finish();

推荐