Webisters CLI Library This library is designed for reuse in Composer-based PHP applications.
A lightweight PHP library for building command line applications. It has three core components:
A static toolkit for terminal output and input:
write(),style(),success(),info(),error(),box(),newLine()for formatted output with optionalFramework\CLI\Styles\ForegroundColor,BackgroundColorandFormatstylingprogress(),spinner(),liveLine()for live terminal feedbackprompt(),getInput(),secret()for reading user inputtable()for rendering tabular datagetWidth(),wrap(),strlen(),clear(),beep()and terminal helpers- ANSI control with
setAnsi()and quiet mode withsetQuiet() - Signal handling with
onSignal(),onSigint()andrestoreSignal()when pcntl is available
The abstract base class for every console command. Extend it and implement run():
$name,getDescription(),setGroup(),setUsage()andsetAliases()describe the command and its help outputgetOptions()defines the options a command acceptsactivate()/deactivate()control availability
Discovers, registers and runs commands:
addCommand()/addCommands()accept Command instances or class namesrun()parses argv, matches the requested command (including aliases) and dispatches toexec()- Unknown commands fall back to
Index(which lists available commands) and suggest the closest matching command name getArgument(),getArguments(),getOption()andgetOptions()expose the parsed command line
All output helpers live on the static Framework\CLI\CLI class and write to STDOUT. Colors are emitted only when the terminal supports ANSI; use CLI::setAnsi(false) to force plain output.
use Framework\CLI\CLI;
use Framework\CLI\Styles\BackgroundColor;
use Framework\CLI\Styles\ForegroundColor;
use Framework\CLI\Styles\Format;
CLI::write('Plain text');
CLI::write('Colored text', ForegroundColor::green);
CLI::write('On a red background', null, BackgroundColor::red);
CLI::write('Wrapped to 40 columns', null, null, 40);
// Full control with style(): color, background and formats
CLI::write(CLI::style('Warning!', 'yellow', null, [Format::bold]));Colors and formats can be passed as enum cases or as plain strings, for example 'red', 'bright_cyan', 'underline'.
CLI::success('Task completed'); // green
CLI::info('Just so you know'); // blue
CLI::error('Something broke'); // red, then exits with code 1$name = CLI::getInput('Name: ');
$answer = CLI::prompt('Continue?', ['y', 'n']); // repeats until a valid option is given
$token = CLI::secret('Token: '); // hidden inputforeach ($items as $i => $item) {
// process $item ...
CLI::progress($i + 1, \count($items), 'Importing');
}
CLI::spinner(); // spin one frame while waiting
CLI::newLine();- Create a command by extending
Framework\CLI\Commandand implementingrun():
<?php
use Framework\CLI\CLI;
use Framework\CLI\Command;
class GreetCommand extends Command
{
protected string $name = 'greet';
public function getDescription() : string
{
return 'Greets the user.';
}
public function getOptions() : array
{
return ['-s' => 'Shout the greeting.']; // options the command accepts
}
public function run() : void
{
$name = $this->getConsole()->getArgument(0) ?? 'world';
$message = "Hello, {$name}!";
if ($this->getConsole()->getOption('s')) {
$message = \strtoupper($message);
}
CLI::write($message);
}
}- Register the command with a
Consoleand run it. Pass a Command instance or its class name:
use Framework\CLI\Console;
$console = new Console();
$console->addCommand(GreetCommand::class);
$console->run();- Call it from the terminal:
php app greet Alice # Hello, Alice!
php app greet Alice -s # HELLO, ALICE!
php app help greet # auto generated usage outputrun() is invoked automatically. The Console parses argv for you: everything before the first option is available via getArgument(), and --option=value or -o value style options via getOption(). Commands can also declare setAliases() to be reachable by multiple names and setGroup() to organize them in the index listing.
composer require webisters/cli- PHP:
>=8.2 - Composer: Compatible with Composer 2.x.
If you're building a full Webisters application, install the framework meta-package:
composer require webisters/frameworkcomposer install
vendor/bin/phpunitFollow consistent coding style and run available linters before opening pull requests.
- Issues: https://github.com/webisters/cli/issues
- Source: https://github.com/webisters/cli
- Documentation: https://webisters.com
- Forum: https://github.com/webisters/forum
- Email: support@webisters.com
MIT