Помощник Formatter

Помощник Formatter предоставляет функции для форматирования вывода цветами. Вы можете сделать более продвинутые вещи с помощью этого помощника, чем вы можете сделать в How to Color and Style the Console Output.

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, но существуют другие, или вы можете создать собственный. См. How to Color and Style the Console Output.

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

Иногда вам нужно будет отобразить сообщение, обрезанное до точного количества символов. Это возможно с методом 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 */

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.