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

Php 如何在同一行上显示Laravel artisan命令输出?,php,laravel,laravel-4,Php,Laravel,Laravel 4,我想用一系列简单的点来显示处理进度。这在浏览器中很容易,只需执行echo'。并在同一行上执行,但在向artisan命令行发送数据时,如何在同一行上执行此操作 以后每次调用$this->info('.')都会将点放在新行上。如果您查看源代码,就会发现$this->info实际上只是$this->output->writeln的快捷方式 您可以使用$this->output->write('.')将其内联 如果您发现自己经常使用此方法,您可以创建自己的帮助器方法,如: public function

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


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

如果您查看源代码,就会发现
$this->info
实际上只是
$this->output->writeln
的快捷方式

您可以使用
$this->output->write('.')
将其内联

如果您发现自己经常使用此方法,您可以创建自己的帮助器方法,如:

public function inlineInfo($string)
{
    $this->output->write("<info>$string</info>");
}
公共函数inlineInfo($string)
{
$this->output->write($string);
}
方法info使用writeln,它在末尾添加了一个换行符,您需要使用write


可能有点话题,因为你只想要一系列的点。但是,您可以使用Laravel中的内置功能轻松地在artisan命令中显示进度条

声明一个类变量,如下所示:

protected $progressbar;
foreach (Model::all() as $instance)
{
    $this->progressbar->advance(); //do stuff before or after this
}
然后像这样初始化进度条,比如在fire()方法中:

然后像这样做:

protected $progressbar;
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))
  • Advance
    $bar->Advance()
  • Finish
    $bar->Finish()

  • 没问题,我刚才还在谷歌上搜索同样的问题,无意中发现了进度条解决方案,尽管文档记录得很差,如果有文档记录的话。我想这个答案可能会帮助人们更快地找到它,因为它是一种以一种很好的方式显示进度的便捷方式。是否有一种方法可以显示命令行输出,例如使用
    $this->error()
    ,而不会中断progressbar?如果使用
    new\Symfony\Component\Console\Helper\progressbar>5.2,您可以得到一个progressbar实例($this->output)
    @eComEvo你找到解决问题的方法了吗?我面临同样的问题使用
    $this->command->getOutput()->在播种机内部写入(//…