如何为控制台输出着色和设置样式
Symfony 提供了一个可选的 控制台样式,用于以一致的方式呈现命令的输入和输出。如果您希望应用自己的样式,请使用本文中解释的实用程序在命令输出中显示颜色(例如,区分重要消息、标题、注释等)。
注意
默认情况下,Windows 命令控制台不支持输出着色。Console 组件禁用了 Windows 系统的输出着色,但如果您的命令调用其他脚本,而这些脚本发出颜色序列,它们将被错误地显示为原始转义字符。安装 Cmder、ConEmu、ANSICON、Mintty(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</>');
前景色和背景色都支持任何十六进制颜色。除此之外,还支持以下命名颜色:black
、red
、green
、yellow
、blue
、magenta
、cyan
、white
、gray
、bright-red
、bright-green
、bright-yellow
、bright-blue
、bright-magenta
、bright-cyan
和 bright-white
。
注意
如果终端不支持真彩色,则给定的颜色将被最接近的颜色替换,具体取决于终端的功能。例如,#c0392b
在 256 色终端中会降级为 #d75f5f
,在 8 色终端中会降级为 red
。
可用的选项有:bold
、underscore
、blink
、reverse
(启用“反向视频”模式,其中背景色和前景色互换)和 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 将丢失。