如何在Laravel和Artisan中向控制台输出信息?

41

我很好奇,我正在使用Laravel和Artisan进行迁移。是否有一种方法可以将信息输出到控制台?我似乎找不到任何关于此的信息。例如:

<?php

class Generate_Sample_Users{

    public function up(){

        //Echo to console here
        echo "Creating sample users...";

        $generator = new Sample_Data();
        $user_count = 30;
        $users = array();


        for($i=0; $i < $user_count; $i++){
            array_push($users, $generator->generate_user($i));
        }

        DB::table('users')->insert($users);
    }

    public function down(){
        DB::table('users')->delete();
    }

}

1
只是一个提示,迁移用于创建模式,而种子用于填充数据库。你上面所做的看起来像是个种子。 - Karl Laurentius Roos
谢谢你的纠正,Karl。我使用了不同的迁移来创建模式,然后运行此迁移以仅为我的开发环境填充示例数据。这样做是不正确的吗? - Ryan Smith
1
如果您正在使用Laravel 4,最好使用seeds来完成此操作:http://four.laravel.com/docs/migrations#database-seeding - JackPoint
1
太棒了,谢谢。我喜欢Laravel,它总是领先一步。 - Ryan Smith
8个回答

76

我不知道您是否在使用Laravel 3或Laravel 4,也不知道它是否在Laravel 3中也可行,但我在文档中找到了这个。

$this->info('Creating sample users...');

编辑

如果您切换到数据库种子,则可以使用此功能来显示消息。

$this->command->info('Creating sample users...');

这是 Laravel 4,我遇到了一个未定义方法的调用错误。我应该在我的迁移中扩展一个类吗? - Ryan Smith
1
只是出于好奇,有没有一种方法可以在 Laravel 3 中实现这个?谢谢 ;) - Ryan Smith
种子?文档中找不到任何相关信息。在控制台中回显?同样找不到任何有关的内容。 - JackPoint
1
在 Laravel 4.2 的 Migration 中,这两个都对我不起作用。 - tremby
3
不建议在 Laravel 的 >4.0 版本(包括 4.2 版本)中使用此方法。请更新您的答案。 - Hilmi Erdem KEREN
$this->info() 只能在命令中使用,不能在迁移中使用。 - Matt K

44

这对我有效

use Symfony\Component\Console\Output\ConsoleOutput;

class MigrateData {

    public function up()
    {
        $output = new ConsoleOutput();

        for($i=0; $i<50000; $i++)
        {
             $output->writeln('Converting '.$i.' of 50000');
        }
     }
}

我有一个迁移任务,将一个大表格转换成更有效的格式,并在操作过程中获取一些进度。


3
这对于我在Laravel 4.2上的使用是有效的;被采纳的答案则不行。 - Pepijn Olivier

10

在 Laravel5 中进行数据库种子数据填充,您可以使用

$this->command->info('My info');
$this->command->error('My error');

输出结果到命令行。

info会以绿色的字体显示信息,而error则会以红色的字体显示,通常用于错误信息。


3
在Laravel 5.8上对我很有效,谢谢!(请注意,您可以使用<comment>(黄色),<question>(浅蓝色背景)或<error>(红色背景)而不是<info>来产生不同的颜色效果)。 - Wilbo Baggins

9

由于选择的答案似乎在4.2之后不起作用,因此我建议简单处理:

public function up() {
     // Migration runs //
     echo 'Records processed' . PHP_EOL;
}

2
耶!保持简单!适用于任何Laravel版本:D - Davuz

5

我喜欢Dumper添加的颜色(在Laravel 5.3上测试)。我认为它比使用echo看起来更漂亮一些。我对echo输出的问题是太容易被忽视了,而Dumper添加了一些绿色,可以抓住人们的眼球:

public function up() {
     // Migration runs //
     (new Illuminate\Support\Debug\Dumper)->dump("A bit more colorful text");
}

这真的不是回答问题的答案,对吧? - Joe C
3
为什么这不是问题的答案?在迁移期间,它会输出您想要的文本到控制台。与上面的答案唯一的区别是它的颜色不同(绿色)。 - gsaqui

5
谈到Laravel 5(您可以使用“php artisan --version”检查您拥有的版本),Migration基类没有打印方法。一个简单的“echo”就能完成工作,但是如果你想的话,你可以扩展它并添加这个功能。
abstract class MyMigration extends Migration
{
    // colors for console echo
    protected const COLOR_RED = 'COLOR_RED';
    protected const COLOR_GREEN = 'COLOR_GREEN';
    protected const COLOR_YELLOW = 'COLOR_YELLOW';

    protected function logMessage($str, String $color = null)
    {
        switch ($color) {
            case self::COLOR_RED:
                $str = "\033[01;31m$str\033[0m";
                break;
            case self::COLOR_GREEN:
                $str = "\033[01;32m$str\033[0m";
                break;
            case self::COLOR_YELLOW:
                $str = "\033[01;33m$str\033[0m";
            break;

            echo $str . PHP_EOL;
        }
    }
}

然后只需使用您的消息调用它:

$this->logMessage("Your message", self::COLOR_RED );

3
'

在 Laravel 5.2 上,`Symfony\Component\Console\Output\ConsoleOutput;` 对我很管用。

'

-1

只需使用print()函数

例如:

$var = 'test';
print("\n$var");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接