Как работать с форматированием вывода в Yii2 Console


Использование команд

Для работы с консолью в Yii2 используется механизм команд. Команда представляет собой класс, который наследуется от класса yii\console\Controller. Внутри класса команды определяются опции и аргументы, а также метод actionIndex(), который будет вызван при выполнении команды без указания конкретного действия.

Пример команды:

namespace app\commands;use yii\console\Controller;class HelloController extends Controller{public function actionIndex($name = 'Guest'){echo 'Hello, ' . $name . '!' . PHP_EOL;}}

Чтобы выполнить команду, нужно вызвать консольное приложение Yii2 и указать имя команды и необходимые аргументы и опции. Например, чтобы выполнить команду «hello» с аргументом «John», нужно выполнить следующую команду:

yii hello John

Результат выполнения команды будет выведен в консоль.

Цветовое форматирование

Цвет текста

Для изменения цвета текста в Yii2 Console можно использовать следующие методы:

  • Console::ansiFormat() — применяет форматирование к тексту и возвращает его в нужном формате;

Метод ansiFormat() принимает два аргумента: текст и спецификацию цвета. Спецификация цвета может быть представлена строкой с цифрами или константами из класса Console.

Примеры использования:

Простое форматирование цвета текста:

echo Console::ansiFormat('Hello, world!', Console::FG_RED) . "";

Форматирование цвета текста с включением других опции:

echo Console::ansiFormat('Hello, world!', [Console::FG_YELLOW, Console::BOLD, Console::UNDERLINE]) . "";

Цвет фона

Для изменения цвета фона в Yii2 Console можно использовать следующие методы:

  • Console::ansiFormat() — применяет форматирование к тексту и возвращает его в нужном формате;

Метод ansiFormat() принимает два аргумента: текст и спецификацию цвета фона. Спецификация цвета фона может быть представлена строкой с цифрами или константами из класса Console.

Примеры использования:

Простое форматирование цвета фона текста:

echo Console::ansiFormat('Hello, world!', Console::BG_RED) . "";

Форматирование цвета фона текста с включением других опции:

echo Console::ansiFormat('Hello, world!', [Console::BG_YELLOW, Console::BOLD, Console::UNDERLINE]) . "";

Форматирование таблиц

Чтобы создать таблицу, мы сначала создаем объект класса yii\helpers\ConsoleTable и задаем заголовки столбцов:

$table = new yii\helpers\ConsoleTable();$table->setHeaders(['Имя', 'Возраст', 'Город']);

Затем мы добавляем строки данных для каждого столбца:

$table->addRow(['Иван', 25, 'Москва']);$table->addRow(['Анна', 30, 'Санкт-Петербург']);

После того, как мы добавили все строки данных, мы можем вывести таблицу в консоль:

$table->render();

Результатом будет следующая таблица:

ИмяВозрастГород
Иван25Москва
Анна30Санкт-Петербург

Также можно применить форматирование к таблице, например, задать цвет шрифта или фона:

$table->setStyle(['fg' => 'blue']);$table->render();

Теперь таблица будет выведена с синим цветом шрифта:

ИмяВозрастГород
Иван25Москва
Анна30Санкт-Петербург

Информационные сообщения

Console::stdout('Выполняется задача...');

:

Console::stdout('Задача выполнена успешно.' . "
");

Мы можем использовать этот метод по своему усмотрению и добавлять переводы строк и другие форматирования в текст сообщения. Например, мы можем выделить некоторые слова жирным или курсивом:

Console::stdout('Выполняется задача ' . 'task1' . '...' . "
");

Сообщения об ошибках

В процессе разработки консольных приложений в Yii2 возникает необходимость контролировать и сообщать об ошибках. Yii2 Console предоставляет набор инструментов для генерации и форматирования сообщений об ошибках.

Yii::error('Ошибка при выполнении команды');

Если нужно вывести дополнительную информацию, такую как стек вызовов или контекст ошибки, можно воспользоваться методом exception(). Он принимает один обязательный параметр — объект исключения. Пример использования:

try {// выполняем команду} catch (\Exception $e) {Yii::error($e->getMessage());Yii::error($e->getTraceAsString());}
Yii::$app->formatter->stderr('Ошибка при выполнении команды');

Метод stderr() позволяет раскрашивать сообщение об ошибке. Также можно использовать методы форматирования текста, такие как bold() и italic(). Пример использования:

Yii::$app->formatter->stderr(Yii::$app->formatter->bold('Ошибка') . ' при выполнении команды');Yii::$app->formatter->stderr(Yii::$app->formatter->italic('Произошла ошибка'));

Таким образом, в Yii2 Console есть множество возможностей для генерации и форматирования сообщений об ошибках. Используя эти инструменты, разработчик может контролировать и предоставлять полезную информацию о возникших проблемах.

Прогресс и статус

Для работы с ProgressBar нужно сначала создать экземпляр класса, указав общее количество элементов для обработки. Затем, внутри цикла обработки элементов, вызывать методы ProgressBar для обновления информации о прогрессе работы.

Например, если у нас есть 1000 элементов для обработки:

$bar = new ProgressBar(1000);foreach ($elements as $element) {// Обработка элемента$bar->update();}$bar->finish();

Пример:


use yii\helpers\Console;
Console::output('This is a test message');
Console::output('This is another test message');
$output = Console::getOutput();
$filteredOutput = $output->grep('another');
Console::output($filteredOutput);


Console::output('This is a test message');
Console::output('This is another test message');
$output = Console::getOutput()
->grep('another')
->grep('test');
Console::output($output);

Логирование

В Yii2 Console есть встроенные инструменты для записи сообщений логов. Логирование позволяет записывать информацию в различные источники, такие как файлы, базы данных, электронные почты и т. д. Это полезно для отслеживания выполнения консольных команд и сообщений об ошибках.

Для использования логирования в Yii2 Console вам необходимо создать экземпляр класса Yii2 Logger и вызвать его методы для записи сообщений. Сообщения логов можно разделить на разные уровни важности, такие как информационные сообщения, предупреждения и ошибки.

Пример использования логирования:

use yii\console\Controller;use yii\log\Logger;class SiteController extends Controller{public function actionTest(){$logger = new Logger();$logger->log('This is an informational message.', Logger::LEVEL_INFO);$logger->log('This is a warning message.', Logger::LEVEL_WARNING);$logger->log('This is an error message.', Logger::LEVEL_ERROR);}}

Вы можете указать различные источники для записи сообщений логов, используя соответствующую конфигурацию в файле console/config/main.php:

'resources' => ['file' => ['class' => 'yii\log\FileTarget','levels' => ['error', 'warning'],'categories' => ['console'],'logFile' => '@runtime/logs/console.log',],'email' => ['class' => 'yii\log\EmailTarget','levels' => ['error'],'categories' => ['console'],'message' => ['from' => '[email protected]','to' => '[email protected]','subject' => 'Console Error',],],// другие источники логирования]

Вы можете указать различные источники для разных уровней важности сообщений, разные категории сообщений и настроить их свойства, такие как путь к файлу лога или адрес электронной почты. Для получения подробной информации о настройке логирования в Yii2 Console смотрите документацию Yii2.

Логирование позволяет вам отслеживать выполнение консольных команд, а также быстро находить и исправлять ошибки. Оно является неотъемлемой частью разработки с использованием Yii2 Console.

Пользовательские настройки

Класс OutputFormatter отвечает за форматирование текста. Он предоставляет методы для изменения цвета, шрифта и фона текста.

Класс OutputFormatterStyle позволяет определить стили для текста, такие как жирный, курсив и подчеркнутый текст. Каждому стилю присваивается имя, которое можно использовать в методе setStyle() класса OutputFormatter.

Пример использования пользовательских настроек:

$output = new ConsoleOutput();$formatter = $output->getFormatter();$style1 = new OutputFormatterStyle('green', 'black', ['bold']);$style2 = new OutputFormatterStyle('yellow', 'black', ['underscore']);$formatter->setStyle('success', $style1);$formatter->setStyle('warning', $style2);$output->writeln('<info><success>Success!</success></info>');$output->writeln('<info><warning>Warning!</warning></info>');

В результате, строка «Success!» будет отформатирована зеленым цветом на черном фоне, а строка «Warning!» — желтым цветом на черном фоне с подчеркиванием.

МетодПараметрыОписание
setDecorated()bool $decorated
isDecorated()Нет параметров
setFormatter()OutputFormatterInterface $formatter
getFormatter()Нет параметров
setStyle()string $name, OutputFormatterStyleInterface $style
getStyle()string $name

Добавить комментарий

Вам также может понравиться