如何在同一行显示Laravel artisan命令输出?

时间:2014-08-19 16:25:16

标签: php laravel laravel-4

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

每次对$this->info('.')的调用都会将点放在一个新行上。

3 个答案:

答案 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 + 更简单的语法更方便:

  1. 初始化$bar = $this->output->createProgressBar(count($foo));
  2. 提前$bar->advance();
  3. 完成$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>");
}