PHP-CLI-это простая библиотека, которая помогает в создании красивых сценариев командной строки.
Он заботится о
Он легкий и не имеет сторонних зависимостей . Примечание: это только для неинтерактивных сценариев. У него нет линии чтения или аналогичной поддержки.
Используйте композитор:
php composer.phar require splitbrain/php-cli
Минимальный пример:
#!/usr/bin/php
<?php
require __DIR__ . ' /../vendor/autoload.php ' ;
use splitbrain phpcli CLI ;
use splitbrain phpcli Options ;
class Minimal extends CLI
{
// register options and arguments
protected function setup ( Options $ options )
{
$ options -> setHelp ( ' A very minimal example that does nothing but print a version ' );
$ options -> registerOption ( ' version ' , ' print version ' , ' v ' );
}
// implement your code
protected function main ( Options $ options )
{
if ( $ options -> getOpt ( ' version ' )) {
$ this -> info ( ' 1.0.0 ' );
} else {
echo $ options -> help ();
}
}
}
// execute it
$ cli = new Minimal ();
$ cli -> run ();
Основное использование простое:
extend splitbrainphpcliCLIsetup($options) и параметры регистрации, аргументы, команды и установить текстовые тексты справочных$options->setHelp() добавляет общее описание$options->registerOption() добавляет опцию$options->registerArgument() добавляет аргумент$options->registerCommand() добавляет под командуmain($options) и сделайте свою бизнес -логику там$options->getOpts позволяет вам получить доступ к параметрам SET$options->getArgs() возвращает оставшиеся аргументы после удаления опций$options->getCmd() возвращает под команду, которую использовал пользовательrun() на немБольше примеров можно найти в каталоге примеров. Пожалуйста, обратитесь к документам API для получения дополнительной информации.
По умолчанию класс CLI регистрирует обработчик исключений и будет распечатать сообщение исключения для конечного пользователя и выйдет из программы с помощью ненулевого кода выхода. Вы можете отключить это поведение и поймать все исключения сами, передавая ложь конструктору.
Вы можете использовать предоставленное splitbrainphpcliException чтобы сами по сигнал в вашем основном коде. Код исключения будет использоваться в качестве кода выхода.
StackTraces будет напечатано на debug уровня журнала.
Цветный выход обрабатывается через класс Colors . Он пытается обнаружить, доступен ли цветовой терминал, и только тогда используется цвета терминала. Вы всегда можете подавить цветной вывод, передавая --no-colors в свои сценарии. Отключение цветов также отключает префиксы смайликов.
Простые цветные сообщения журнала могут быть напечатаны вами, используя success() (зеленый), info() (cyan), error() (red) или fatal() (красный). Последний также выйдет из программы с помощью ненулевого кода выхода.
Для более сложной окраски вы можете получить доступ к классу цвета через $this->colors в вашем сценарии. Метод wrap() , вероятно, то, что вы хотите использовать.
Форматер таблицы позволяет раскрасить полные столбцы. Чтобы использовать этот механизм, передайте массив цветов в качестве третьего параметра в свой метод format() . Обратите внимание, что вы не можете передать цветные тексты во вторых параметрах (расчет длины текста и упаковка потерпят неудачу, разбивая ваши тексты).
Класс TableFormatter позволяет вам выравнивать тексты в нескольких столбцах. Он пытается выяснить доступную ширину терминала самостоятельно. Это может быть перезаписано, установив переменную среды COLUMNS .
Форматер используется с помощью метода format() , который ожидает как минимум два массива: первый определяет ширину столбца, второе содержит тексты, которые заполняются в столбцы. Между каждым столбцом граница печатается (по умолчанию одно пространство).
См. example/table.php для использования образца.
Ширина столбцов может быть указана в трех формах:
15 )25% )* )При смешивании фиксированной и процентной ширины проценты относятся к оставскому пространству после того, как были назначены все фиксированные столбцы.
Пространство для границ вычисляется автоматически. Рекомендуется всегда иметь какой -то относительный (процент) или жидкий столб для корректировки для различной ширины терминалов.
Форматер таблицы используется для автоматического экрана справки, доступного при вызове вашего скрипта с -h или --help .
Класс CLI является полностью совместимым с PSR-3 Logger (печатает данные о цветных журналах на Stdout и Stderr). Это полезно, когда вы вызовуте код бэкэнда из вашего CLI, который ожидает, что экземпляр Logger создаст любой разумный выход статуса во время работы.
Если вам необходимо пройти класс, реализующий PsrLogLoggerInterface вы можете сделать это, унаследовав от одного из двух предоставленных классов, реализующих этот интерфейс вместо splitbrainphpcliCLI .
splitbrainphpcliPSR3CLI если вы используете версию 2 PSR3 (PHP <8.0)splitbrainphpcliPSR3CLIv3 если вы используете версию 3 PSR3 (PHP> = 8.0) Полученный объект может быть передано в качестве экземпляра Logger. Разница между ними находится в скорректированных подписях метода (только с подходящим намеком на тип). Убедитесь, что при использовании этих классов установлен предложенный пакет композитора psr/log .
ПРИМЕЧАНИЕ. Если ваш бэкэнд-код вызывает регистратор PSR-3, но фактически не введите проверку для интерфейса (он же только для LoggerAware), вы также можете просто передать экземпляр splitbrainphpcliCLI .
Вы можете отрегулировать условности вашего инструмента CLI, используя параметр --loglevel . Поддерживаемые Loglevels-это Loglevels PSR-3 и наш собственный уровень success :

Удобные методы для всех уровней журнала доступны. Интерполяция заполнителей, как описано в PSR-3, также доступна. Сообщения от уровня warning и далее печатаются в STDERR , все ниже напечатаны в STDOUT .
Уровень журнала по умолчанию вашего скрипта может быть установлен путем перезаписи участника $logdefault .
См example/logging.php для примера.