跳到内容

格式化助手

编辑此页

Formatter 助手提供了使用颜色格式化输出的函数。你可以使用此助手做比 如何着色和样式化控制台输出 中更高级的事情。

FormatterHelper 包含在默认的助手集中,你可以通过调用 getHelper() 来获取它

1
$formatter = $this->getHelper('formatter');

这些方法返回一个字符串,你通常会通过将其传递给 OutputInterface::writeln 方法来将其渲染到控制台。

注意

作为替代方案,请考虑使用 SymfonyStyle 来显示风格化的区块。

Symfony 在打印属于某个“章节”的消息时提供了一种定义的样式。它以彩色打印章节,并在其周围加上括号,实际消息在其右侧。减去颜色,它看起来像这样

1
[SomeSection] Here is some message related to that section

要重现这种样式,你可以使用 formatSection() 方法

1
2
3
4
5
$formattedLine = $formatter->formatSection(
    'SomeSection',
    'Here is some message related to that section'
);
$output->writeln($formattedLine);

有时你希望能够打印带有背景颜色的整块文本。Symfony 在打印错误消息时使用此方法。

如果你手动在多行上打印错误消息,你会注意到背景的长度仅与每条单独的行一样长。使用 formatBlock() 生成区块输出

1
2
3
$errorMessages = ['Error!', 'Something went wrong'];
$formattedBlock = $formatter->formatBlock($errorMessages, 'error');
$output->writeln($formattedBlock);

正如你所看到的,将消息数组传递给 formatBlock() 方法会创建所需的输出。如果你将 true 作为第三个参数传递,则该区块将以更多填充格式化(消息上方和下方各一个空行,左右各 2 个空格)。

你在区块中使用的确切“样式”取决于你。在本例中,你使用的是预定义的 error 样式,但还有其他样式(infocommentquestion),或者你可以创建自己的样式。请参阅 如何着色和样式化控制台输出

有时你想要打印截断为显式字符长度的消息。这可以通过 truncate() 方法实现。

如果你想截断一个很长的消息,例如,截断为 7 个字符,你可以这样写

1
2
3
$message = "This is a very long message, which should be truncated";
$truncatedMessage = $formatter->truncate($message, 7);
$output->writeln($truncatedMessage);

输出将是

1
This is...

消息被截断为给定的长度,然后将后缀附加到该字符串的末尾。

负字符串长度

如果长度为负数,则要截断的字符数从字符串的末尾开始计数

1
$truncatedMessage = $formatter->truncate($message, -5);

这将导致

1
This is a very long message, which should be trun...

自定义后缀

默认情况下,使用 ... 后缀。如果你希望使用不同的后缀,请将其作为第三个参数传递给该方法。后缀始终附加,除非截断的长度长于消息和后缀长度。如果你根本不想使用后缀,请传递一个空字符串

1
2
3
4
5
6
$truncatedMessage = $formatter->truncate($message, 7, '!!'); // result: This is!!
$truncatedMessage = $formatter->truncate($message, 7, '');   // result: This is

$truncatedMessage = $formatter->truncate('test', 10);
// result: test
// because length of the "test..." string is shorter than 10

格式化时间

有时你想要将秒格式化为时间。这可以通过 formatTime() 方法实现。第一个参数是要格式化的秒数,第二个参数是结果的精度(默认为 1

1
2
3
4
Helper::formatTime(42);        // 42 secs
Helper::formatTime(125);       // 2 mins
Helper::formatTime(125, 2);    // 2 mins, 5 secs
Helper::formatTime(172799, 4); // 1 day, 23 hrs, 59 mins, 59 secs

格式化内存

有时你想要将内存格式化为 GiB、MiB、KiB 和 B。这可以通过 formatMemory() 方法实现。唯一的参数是要格式化的内存大小

1
2
3
4
Helper::formatMemory(512);                // 512 B
Helper::formatMemory(1024);               // 1 KiB
Helper::formatMemory(1024 * 1024);        // 1.0 MiB
Helper::formatMemory(1024 * 1024 * 1024); // 1 GiB
这项工作,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本