Laravel 5.4中的控制台外部控制台的彩色输出

时间:2017-03-25 15:47:06

标签: php laravel laravel-5 laravel-5.4

命令我可以输出

$this->error();
$this->info();

但是如果我在Command中实例化其他类 - 如何在外部类中使用彩色输出来控制?其他类不会扩展Command类。

我只发现了这个解决方案,我不喜欢它。)

<?php

use Illuminate\Console\Command;

class External
{
    /** @var Command */
    protected $command;

    public function __construct(Command $command) {
        $this->command = $command;
    }

    protected function error($msg)
    {
        $this->command->error($msg);
    }

    protected function info($msg, $v = null)
    {
        $this->command->info($msg, $v);
    }
}

2 个答案:

答案 0 :(得分:2)

您现有的方法似乎很合理。

你可以使用更轻的this approach

  /*
    Black 0;30
    Blue 0;34
    Green 0;32
    Cyan 0;36
    Red 0;31
    Purple 0;35
    Brown 0;33
    Light Gray 0;37 
    Dark Gray 1;30
    Light Blue 1;34
    Light Green 1;32
    Light Cyan 1;36
    Light Red 1;31
    Light Purple 1;35
    Yellow 1;33
    White 1;37
  */

  echo "\033[31m some colored text \033[0m some white text \n";
  echo "\033[32m some colored text \033[0m some white text \n";

您还可以访问底层的SymfonyCommand,因此在您现有的方法中,您可以do this

  <?php

  use Illuminate\Console\Command;
  use Symfony\Component\Console\Formatter\OutputFormatterStyle;

  class External
  {
      /** @var Command */
      protected $command;

      public function __construct(Command $command) {
          $this->command = $command;
      }

      protected function error($msg)
      {
          $this->command->error($msg);
      }

      protected function info($msg, $v = null)
      {
          $this->command->info($msg, $v);
      }
      protected function fire($msg)
      {
          // Custom colors
          $style = new OutputFormatterStyle('red', 'yellow', array('bold', 'blink'));
          $this->command->output->getFormatter()->setStyle('fire', $style);

          $this->command->output->writeln('<fire>' . msg . '</fire>');
      }
  }

答案 1 :(得分:1)

第一种方法在nunomaduro / collision包中实现:

<?php

$color = new NunoMaduro\Collision\ConsoleColor;

echo($color->apply("red", "some text in red"));