Помощник Formatter

Помощник Formatter

Помощник Formatter предоставляет функции для форматирования вывода цветами. Вы можете сделать более продвинутые вещи с помощью этого помощника, чем вы можете сделать в Как раскрашивать и стилизовать вывод консоли.

FormatterHelper включён в набор помощника по умолчанию, который вы можете получить, вызвав getHelperSet():

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

Методы возвращают строку, которую вы обычно будете отображать консоли, передавая её методу OutputInterface::writeln.

Отображение сообщений в разделе

Symfony предоставляет определённый стиль при отображении сообщения, принадлежащего некоторому "разделу". Он отображает раздел в цвете и со скобками вокруг него, а само сообщение правее от этого. Без учёта цвета, это выглядит так:

1
[SomeSection] Здесь какое-то сообщение, связанное с разделом

Чтобы воспроизвести этот стиль, вы можете использовать метод 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() созадаёт желаемый вывод. Если вы передадите true в качестве третьего параметра, то блок будет форматирован с большей подкладкой (одной пустой строчкой над и под собщениями и 2 пробелами слева и справа).

Конкретный "стиль", который вы используете в блоке, зависит только от вас. В этом случае, вы используете предопределённый стиль error, но существуют другие, или вы можете создать собственный. См. Как раскрашивать и стилизовать вывод консоли.

Отображение обрезанных сообщений

Иногда вам нужно будет отобразить сообщение, обрезанное до точного количества символов. Это возможно с методом truncate().

Если вы хотите обрезать очень длинное сообщение, к примеру, до 7 символов, вы можете написать:

1
2
3
$message = "Это очень длинное сообщние, которое стоит обрезать";
$truncatedMessage = $formatter->truncate($message, 7);
$output->writeln($truncatedMessage);

И вывод будет:

1
Это оче...

Сообщение обрезается до заданной длинны, а потом к концу этой строки добавляется суффикс.

Отрицательная длина строки

Если длина отрицательная, то количество символов для обрезания считается от конца строки:

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

Это приведёт к :

1
Это очень длинное сообщение, которое стоит обр...

Пользовательский суффикс

По умолчанию используется суффикс .... Если вы хотите использовать другой, просто передайте его в качестве третьго аргумента метода. Суффикс всегда добавляется, кроме случаев, когда длина обрезания больше длины сообщения и суффикса. Если вы не хотите использовать суффикс вообще, просто передайте пустую строку:

1
2
3
4
5
$truncatedMessage = $formatter->truncate($message, 7, '!!'); // result: Это оч!!
$truncatedMessage = $formatter->truncate($message, 7, '');   // result: Это оч
$truncatedMessage = $formatter->truncate('test', 10));
/* result: test
   because length of the "test..." string is shorter than 10 */