【问题标题】:How to echo to console in Laravel and Artisan?如何在 Laravel 和 Artisan 中回显到控制台?
【发布时间】:2013-05-19 23:53:09
【问题描述】:

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

}

【问题讨论】:

  • 只是提示,迁移用于创建模式,而种子用于为数据库播种。你在上面所做的对我来说就像一颗种子。
  • 感谢 Karl 的更正,我使用不同的迁移创建架构,然后运行此迁移以仅为我的开发环境填充示例数据。这是不正确的做法吗?
  • 如果你使用 Laravel 4,最好使用种子:four.laravel.com/docs/migrations#database-seeding
  • 非常感谢。我喜欢 Laravel,它总是领先一步。

标签: php laravel laravel-4 console migration


【解决方案1】:

不知道你使用的是 Laravel 3 还是 Laravel 4,以及它是否也可以在 Laravel 3 中使用,但我在 the docs 中找到了这个。

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

编辑

如果你切换到database seeds,你可以用它来显示一条消息

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

【讨论】:

  • 这是 Laravel 4,我接到一个未定义方法错误的调用。我应该在迁移中扩展一个类吗?
  • 谢谢 ;) 只是出于好奇,有没有办法在 Laravel 3 中做到这一点?
  • 种子?在文档中找不到任何关于它的信息。控制台回声?一样,没找到。
  • 从迁移到 Laravel 4.2 中,这些都不适合我。
  • 已弃用 >4.0 版本的 Laravel(包括 4.2)。请更新您的答案。
【解决方案2】:

这对我有用

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');
        }
     }
}

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

【讨论】:

  • 这适用于我在 Laravel 4.2 上;接受的答案不
【解决方案3】:

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

$this->command->getOutput()->writeln("<info>Your message here</info>");

在命令行上打印输出。

&lt;info&gt; 以绿色显示消息,而&lt;error&gt; 以红色显示,可用于错误消息。

【讨论】:

  • 在 Laravel 5.8 中非常适合我,谢谢! (请注意,您可以使用 (黄色)、(浅蓝色 bg)或 (红色 bg)代替 以获得不同的颜色效果)
【解决方案4】:

由于选择的答案自 4.2 起似乎不起作用,我说保持简单:

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

【讨论】:

  • 是的!保持简单!使用任何 Laravel 版本:D
【解决方案5】:

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

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

【讨论】:

  • 这不是问题的真正答案,是吗?
  • 为什么这不是问题的答案?它在迁移期间将您想要的文本输出到控制台上。与上述一个答案的唯一区别是它的颜色不同(绿色)。
【解决方案6】:

说到 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 );

【讨论】:

    【解决方案7】:

    'Symfony\Component\Console\Output\ConsoleOutput;'在 Laravel 5.2 上为我工作

    【讨论】:

      【解决方案8】:

      只需使用 print()

      例如

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

      【讨论】:

        猜你喜欢
        • 2016-09-24
        • 1970-01-01
        • 2016-12-11
        • 2016-04-10
        • 2022-06-14
        • 2018-07-31
        • 2015-04-06
        • 2018-07-01
        • 2016-01-07
        相关资源
        最近更新 更多