Formatter Helper(格式助手)

3.4 版本
维护中的版本

格式助手(format helpers)所提供的方法,用于配合颜色来格式化output。相对于 如何对命令行进行彩色和样式输出 中提到的,使用这个helper你可以做更多高端事情。

FormatterHelper 已包含在默认的助手集中,你可以调用 getHelperSet() 来得到它:

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

该方法返回的是一个字符串,通常你要把它传入 OutputInterface::writeln 方法以完成对控制台的渲染。

在区段内输出信息 

在输出属于某些“区段(section)”的信息时,Symfony提供了已定义好的样式(style)。它在区段中使用颜色并用括号括起来,真实的message则在其右侧。不带颜色的话是下面这样:

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 = array('Error!', 'Something went wrong');
$formattedBlock = $formatter->formatBlock($errorMessages, 'error');
$output->writeln($formattedBlock);

你已看到,把一个“消息数组”传入 formatBlock() 方法即可创建想要的output。如果你把 true 作为第三个参数,文字块将格式化为更大的padding (文字块儿的顶部和底部留一个空行,左右各是2个空格)。

在块儿内使用何种确切的 "style" 取决于你。本例中,你使用的是预定义的 error 样式,但是还有其他样式,或者你可以创建自己的。参考 如何对命令行进行彩色和样式输出

输出截断的信息 

3.1 truncate 方法自Symfony 3.1起被引入。

有时你想要输出一个被显式截取了指定字符长度的message。这可以用 truncate() 方法来实现:

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 
   这是因为 "test..." 字符串的长度小于10 */

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)