命令我可以输出
$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);
}
}
答案 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"));