web-dev-qa-db-fra.com

Comment faire écho pour se consoler Laravel et artisan?

J'étais curieux, j'utilise Laravel et Artisan pour mes migrations. Existe-t-il une méthode pour sortir des informations sur la console? Je n'arrive pas à trouver aucune information à ce sujet. Par exemple:

<?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();
    }

}
23
Ryan Smith

Je ne sais pas si vous utilisez Laravel 3 ou Laravel 4, et si c'est également possible dans Laravel 3, mais j'ai trouvé cela dans les docs .

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

MODIFIER

Si vous passez à graines de la base de données vous pouvez l'utiliser pour afficher un message

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

Ça marche pour moi

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

J'ai une migration qui convertit une grande table en un format plus efficace et l'utilise pour obtenir des progrès pendant son fonctionnement.

22
mtopley

Puisque la réponse choisie ne semble pas fonctionner depuis la version 4.2, je dis simplement de rester simple:

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

J'aime la couleur ajoutée par le Dumper (testé sur Laravel 5.3). Je pense que semble un peu plus agréable que d'utiliser l'écho. Le problème que j'ai avec l'écho est qu'il est trop facile de rater le Dumper, il ajoute un peu de vert qui attire l'attention:

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

'Symfony\Component\Console\Output\ConsoleOutput;' travaille pour moi sur Laravel 5.2

2
xinHAOr

Pour l'ensemencement dans Laravel5, vous pouvez utiliser

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

pour imprimer le résultat en ligne de commande.

<info> affiche le message en vert, alors que <error> apparaît en rouge et peut être utilisé pour les messages d'erreur.

2
Chittaranjan

En parlant de Laravel 5 (vous pouvez vérifier la version que vous avez avec php artisan --version), la classe de base Migration n’a pas de méthode d’impression. 

Un simple echo fera le travail. Cependant, si vous le souhaitez, vous pouvez l’étendre et ajouter cette fonctionnalité:

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

et appelez-le simplement avec votre message:

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