Помощник Formatter
Дата обновления перевода 2024-06-24
Помощник Formatter
Помощник Formatter предоставляет функции для форматирования вывода цветами. Вы можете сделать более продвинутые вещи с помощью этого помощника, чем вы можете сделать в Как раскрашивать и стилизовать вывод консоли.
FormatterHelper включён в набор помощника по умолчанию, который вы можете получить, вызвав getHelperSet():
1
$formatter = $this->getHelper('formatter');
Методы возвращают строку, которую вы обычно будете отображать консоли, передавая её методу OutputInterface::writeln.
Note
В качестве альтернативы можно использовать SymfonyStyle для отображения стилизованных блоков.
Отображение сообщений в разделе
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 6
$truncatedMessage = $formatter->truncate($message, 7, '!!'); // result: This is!!
$truncatedMessage = $formatter->truncate($message, 7, ''); // result: This is
$truncatedMessage = $formatter->truncate('test', 10);
// result: test
// так как длина строки "test..." короче, чем 10 10
Форматирование времени
Иногда требуется отформатировать секунды по времени. Это возможно с помощью метода
formatTime().
Первый аргумент - это секунды для форматирования, а второй аргумент -
точность результата (по умолчанию 1
):
1 2 3 4
Helper::formatTime(42); // 42 секунд
Helper::formatTime(125); // 2 минут
Helper::formatTime(125, 2); // 2 минуты, 5 секунд
Helper::formatTime(172799, 4); // 1 день, 23 часа, 59 минут, 59 секунд
Форматирование памяти
Иногда вам бывает нужно отформатировать память в Гб, Мб, Кб и Б. Это можно сделать с помощью метода formatMemory(). Единственным аргументом является размер памяти для форматирования:
1 2 3 4
Helper::formatMemory(512); // 512 Б
Helper::formatMemory(1024); // 1 Кб
Helper::formatMemory(1024 * 1024); // 1.0 Мб
Helper::formatMemory(1024 * 1024 * 1024); // 1 Гб