
Прочитав этот пост о написании собственного консольного приложения на PHP с помощью компонентов Symfony, мне в голову пришла идея реализовать небольшой и удобный велосипед для собственных нужд, которым я хочу поделиться с хабросообществом.
Не буду тянуть резину:
Репозиторий на GitHub
Что умеет?
- Основной функционал:
Console::out(string|array $message, bool $nl, string $style)
— вывод данных в консоль:- Строкой или массивом строк
- С последующим переносом строки или без оного
- Изменение стилей вывода:
Console::STYLE_ERROR
— сообщение об ошибкеConsole::STYLE_WARNING
— уведомлениеConsole::STYLE_SUCCESS
— успешное завершение задачиConsole::STYLE_INFO
— информационное сообщениеConsole::STYLE_NOTE
— примечание к действию или процессу выполненияConsole::STYLE_IMPORTANT
— важное сообщение, заголовок
Console::in
— получение данных от пользователяConsole::clear
— очистка окна консоли от выведенных данных
- Дополнительный:
- Автоматическое формирование списка команд на основе аннотаций
Для чего?
Прежде всего, целью написания данного кода было простое любопытство и желание оформить ворох своих консольных помошников в подобающий наряд из более-менее расширяемого и понятного кода. Я не преследовал цели создать монстра с неограниченными возможностями и поэтому могу предложить лишь базовые функции, которых должно хватить для большинства задач.
А печеньки?
В качестве небольшого бонуса прилагается разбор аннотаций к методам (или командам) приложения, которое использует данную библиотеку.
/**
* @help Выводит информацию о скрипте
*/
public function _i() {
$this->out('Информация о консольном скрипте использующем Console.');
}
Приведенный выше код, при обращении к скрипту
php app.php
, выведет следующее:Application Name
Commands list:
-i
Выводит информацию о сприпте
Подобная справка доступна и при вызове скрипта с ключом
-h
. Как вы могли заметить, методы объявленные с символом подчеркивания (_
) будут приобразованы к стандартным для скриптов в Linux ключам.Все стандартные сообщения можно перевести на желаемый язык переопределив доступную потомку переменную
$lang
которая содержит массив сообщений. Название приложения задается с помощью параметра $application_name
.Подробнее о использовании библиотеки можно посмотреть в файле примера.
Замечу что данное решение не тестировалось в ОС Windows.
Спасибо за внимание!