We neede more colors ! On Artisan commands !!

タグ: Laravel4  

Do you wana to be more colorful your Artisan command? Did you hate funny <info>...</info> syntanx? If so, make stuff simple. Add your color.

make base command

Maybe many Laravel developer use base command class, then extend it. (How about you? ) If you didn't, just make it. (If you have it, so just add run() method.)

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Formatter\OutputFormatter;
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;


class BaseCommand extends Command {

    public function run( InputInterface $input, OutputInterface $output )
    {
        // Set extra colors.
        // The most problem is $output->getFormatter() don't work...
        // So create new formatter to add extra color.

        $formatter = new OutputFormatter( $output->isDecorated() );
        $formatter->setStyle( 'red', new OutputFormatterStyle( 'red', 'black' ) );
        $formatter->setStyle( 'green', new OutputFormatterStyle( 'green', 'black' ) );
        $formatter->setStyle( 'yellow', new OutputFormatterStyle( 'yellow', 'black' ) );
        $formatter->setStyle( 'blue', new OutputFormatterStyle( 'blue', 'black' ) );
        $formatter->setStyle( 'magenta', new OutputFormatterStyle( 'magenta', 'black' ) );
        $formatter->setStyle( 'yellow-blue', new OutputFormatterStyle( 'yellow', 'blue' ) );
        $output->setFormatter( $formatter );

        $result = parent::run( $input, $output );
    }
}

Maybe, you don't need to read Symfony 2 docs. The codes tell what did. Very simple, don't worst your time to know everything. Just copy them. :D

You can add more your colors. ;)

Then use in read command like this :

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class ColorOutputCommand extends BaseCommand {

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'color:color';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'A sample color output.';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function fire()
    {
        $this->line('<green>Green output.</green>');
        $this->line('<yellow-blue>Yellow output on Blue back.</yellow-blue>');

        return 0;
    }

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return array( );
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return array( );
    }

}

Pretty simple. Have fun. (Who complained that using escape sequences is simpler?? :D )