跳转到内容

如何为控制台输出着色和设置样式

编辑此页

Symfony 提供了一个可选的 控制台样式,用于以一致的方式呈现命令的输入和输出。如果您希望应用自己的样式,请使用本文中解释的实用程序在命令输出中显示颜色(例如,区分重要消息、标题、注释等)。

注意

默认情况下,Windows 命令控制台不支持输出着色。Console 组件禁用了 Windows 系统的输出着色,但如果您的命令调用其他脚本,而这些脚本发出颜色序列,它们将被错误地显示为原始转义字符。安装 CmderConEmuANSICONMintty(GitBash 和 Cygwin 默认使用)或 Hyper 等免费应用程序,为您的 Windows 命令控制台添加颜色支持。

使用颜色样式

无论何时输出文本,您都可以用标签包围文本来为其输出着色。例如

1
2
3
4
5
6
7
8
9
10
11
// green text
$output->writeln('<info>foo</info>');

// yellow text
$output->writeln('<comment>foo</comment>');

// black text on a cyan background
$output->writeln('<question>foo</question>');

// white text on a red background
$output->writeln('<error>foo</error>');

结束标签可以被 </> 替换,它会撤销最后一个打开的标签建立的所有格式化选项。

可以使用 OutputFormatterStyle 类定义您自己的样式

1
2
3
4
5
6
7
use Symfony\Component\Console\Formatter\OutputFormatterStyle;

// ...
$outputStyle = new OutputFormatterStyle('red', '#ff0', ['bold', 'blink']);
$output->getFormatter()->setStyle('fire', $outputStyle);

$output->writeln('<fire>foo</>');

前景色和背景色都支持任何十六进制颜色。除此之外,还支持以下命名颜色:blackredgreenyellowbluemagentacyanwhitegraybright-redbright-greenbright-yellowbright-bluebright-magentabright-cyanbright-white

注意

如果终端不支持真彩色,则给定的颜色将被最接近的颜色替换,具体取决于终端的功能。例如,#c0392b 在 256 色终端中会降级为 #d75f5f,在 8 色终端中会降级为 red

可用的选项有:boldunderscoreblinkreverse(启用“反向视频”模式,其中背景色和前景色互换)和 conceal(将前景色设置为透明,使键入的文本不可见 - 虽然它可以被选中和复制;此选项通常在要求用户键入敏感信息时使用)。

您也可以直接在标签名称中设置这些颜色和选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// using named colors
$output->writeln('<fg=green>foo</>');

// using hexadecimal colors
$output->writeln('<fg=#c0392b>foo</>');

// black text on a cyan background
$output->writeln('<fg=black;bg=cyan>foo</>');

// bold text on a yellow background
$output->writeln('<bg=yellow;options=bold>foo</>');

// bold text with underscore
$output->writeln('<options=bold,underscore>foo</>');

注意

如果您需要按字面意思渲染标签,请使用反斜杠转义它:\<info> 或使用 escape() 方法来转义给定字符串中包含的所有标签。

命令可以使用特殊的 <href> 标签来显示类似于网页的 <a> 元素的链接

1
$output->writeln('<href=http://symfony.ac.cn>Symfony Homepage</>');

如果您的终端属于支持链接的终端模拟器列表,您可以单击“Symfony Homepage”文本,以在默认浏览器中打开其 URL。否则,您将看到“Symfony Homepage”作为常规文本,并且 URL 将丢失。

本作品,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本