格式化助手
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
样式,但还有其他样式(info
、comment
、question
),或者你可以创建自己的样式。请参阅 如何着色和样式化控制台输出。
打印截断的消息
有时你想要打印截断为显式字符长度的消息。这可以通过 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