如何回应Laravel和Artisan的控制台?

Rya*_*ith 27 php migration console laravel laravel-4

我很好奇,我正在使用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();
    }

}
Run Code Online (Sandbox Code Playgroud)

Jac*_*int 50

不知道你是使用Laravel 3还是Laravel 4,如果它也可以在Laravel 3中使用,但我在文档中找到了这个.

$this->info('Creating sample users...');
Run Code Online (Sandbox Code Playgroud)

编辑

如果切换到数据库种子,可以使用它来显示消息

$this->command->info('Creating sample users...');
Run Code Online (Sandbox Code Playgroud)

  • 已弃用 &gt;4.0 版本的 Laravel(包括 4.2)。请更新您的答案。 (2认同)

小智 31

这适合我

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');
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

我有一个迁移,它将一个大表转换为一个更有效的格式,并使用它来在它工作时取得一些进展.

  • 这适用于Laravel 4.2; 接受的答案没有 (2认同)

Cap*_*ext 8

既然选择的答案从4.2开始似乎没有用,我说只是保持简单:

public function up() {
     // Migration runs //
     echo 'Records processed' . PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的!保持简单!使用任何 Laravel 版本:D (2认同)

Chi*_*jan 6

对于Laravel5中的数据库种子,可以使用

$this->command->getOutput()->writeln("<info>Your message here</info>");
Run Code Online (Sandbox Code Playgroud)

在命令行上打印输出。

<info>以绿色显示消息,而<error>以红色显示,可用于错误消息。

  • 在Laravel 5.8中对我来说效果很好,谢谢!(请注意,您可以使用&lt;comment&gt;(黄色),&lt;question&gt;(浅蓝色bg)或&lt;error&gt;(红色bg)代替&lt;info&gt;以获得不同的色彩效果) (3认同)

gsa*_*qui 5

我喜欢 Dumper 添加的颜色(在 Laravel 5.3 上测试)。我认为看起来比使用回声好一点。我对回声的问题是它太容易被错过了,它添加了一点绿色,吸引了眼球:

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

  • 为什么这不是问题的答案?它在迁移期间将您想要的文本输出到控制台。与上述一个答案的唯一区别是它的颜色不同(绿色)。 (3认同)

guy*_*oni 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后简单地用您的消息调用它:

$this->logMessage("Your message", self::COLOR_RED );
Run Code Online (Sandbox Code Playgroud)