1. Go to this page and download the library: Download jbzoo/cli library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jbzoo / cli example snippets
#!/usr/bin/env php
declare(strict_types=1);
namespace DemoApp;
use JBZoo\Cli\CliApplication;
// Init composer autoloader
ional. Looks at the online generator of ASCII logos
// https://patorjk.com/software/taag/#p=testall&f=Epic&t=My%20Console%20App
$application->setLogo(
<<<'EOF'
__ __ _____ _
| \/ | / ____| | | /\
| \ / |_ _ | | ___ _ __ ___ ___ | | ___ / \ _ __ _ __
| |\/| | | | | | | / _ \| '_ \/ __|/ _ \| |/ _ \ / /\ \ | '_ \| '_ \
| | | | |_| | | |___| (_) | | | \__ \ (_) | | __/ / ____ \| |_) | |_) |
|_| |_|\__, | \_____\___/|_| |_|___/\___/|_|\___| /_/ \_\ .__/| .__/
__/ | | | | |
|___/ |_| |_|
EOF,
);
// Scan directory to find commands.
// * It doesn't work recursively!
// * They must be inherited from the class \JBZoo\Cli\CliCommand
$application->registerCommandsByPath(__DIR__ . '/Commands', __NAMESPACE__);
// Optional. Action name by default (if there is no arguments)
$application->setDefaultCommand('list');
// Run application
$application->run();
declare(strict_types=1);
namespace DemoApp\Commands;
use JBZoo\Cli\CliCommand;
use JBZoo\Cli\Codes;
class Simple extends CliCommand
{
protected function configure(): void
{
// Action name. It will be used in command line.
// Example: `./my-app simple`
$this->setName('simple');
// Defined inhereted CLI options. See ./src/CliCommand.php for details.
parent::configure();
}
protected function executeAction(): int
{
// Your code here
$this->_('Hello world!');
// Exit code. 0 - success, 1 - error.
return self::SUCCESS;
}
}
// If the option has `InputOption::VALUE_NONE` it returns true/false.
// --option-name
$value = $this->getOpt('option-name'); // `$value === true`
// --option-name=" 123.6 "
$value = $this->getOpt('option-name'); // Returns the value AS-IS. `$value === " 123.6 "`
// --option-name=" 123.6 "
$value = $this->getOptBool('option-name'); // Converts an input variable to boolean. `$value === true`
// --option-name=" 123.6 "
$value = $this->getOptInt('option-name'); // Converts an input variable to integer. `$value === 123`
$value = $this->getOptInt('option-name', 42, [1, 2, 42]); // Strict comparing with allowed values
// --option-name=" 123.6 "
$value = $this->getOptFloat('option-name'); // Converts an input variable to float. `$value === 123.6`
$value = $this->getOptFloat('option-name', 1.0, [1.0, 2.0, 3.0]); // Strict comparing with allowed values
// --option-name=" 123.6 "
$value = $this->getOptString('option-name'); // Converts an input variable to trimmed string. `$value === "123.6"`
$value = $this->getOptString('option-name', 'default', ['default', 'mini', 'full']); // Strict comparing with allowed values
// --option-name=123.6
$value = $this->getOptArray('option-name'); // Converts an input variable to trimmed string. `$value === ["123.6"]`
// --option-name="15 July 2021 13:48:00"
$value = $this->getOptDatetime('option-name'); // Converts an input variable to \DateTimeImmutable object.
// Use standard input as input variable.
// Example. `echo " Qwerty 123 " | php ./my-app agruments`
$value = self::getStdIn(); // Reads StdIn as string value. `$value === " Qwerty 123 \n"`
// There two strictly(!) recommended output ways:
/**
* Prints a message to the output in the command class which inherits from the class \JBZoo\Cli\CliCommand
*
* @param string|string[] $messages Output message(s). Can be an array of strings or a string. Array of strings will be imploded with new line.
* @param string $verboseLevel is one of value form the class \JBZoo\Cli\OutLvl::*
* @param string $context is array of extra info. Will be serialized to JSON and displayed in the end of the message.
*/
$this->_($messages, $verboseLevel, $context);
/**
* This is global alias function of `$this->_(...)`.
* It's nice to have it if you want to display a text from not CliCommand class.
*/
JBZoo\Cli\cli($messages, $verboseLevel, $context);
$this->progressBar(5, function (): void {
// Some code in loop
});
$this->progressBar($arrayOfSomething, function ($value, $key, $step) {
// Some code in loop
if ($step === 3) {
throw new ExceptionBreak("Something went wrong with \$value={$value}. Stop the loop!");
}
return "<c>Callback Args</c> \$value=<i>{$value}</i>, \$key=<i>{$key}</i>, \$step=<i>{$step}</i>";
}, 'Custom messages based on callback arguments', $throwBatchException);
$yourName = $this->ask("What's your name?", 'Default Noname');
$this->_("Your name is \"{$yourName}\"");
$yourSecret = $this->askPassword("New password?", true);
$this->_("Your secret is \"{$yourSecret}\"");
$selectedColor = $this->askOption("What's your favorite color?", ['Red', 'Blue', 'Yellow'], 'Blue');
$this->_("Selected color is {$selectedColor}");
$isConfirmed = $this->confirmation('Are you ready to execute the script?');
$this->_("Is confirmed: " . ($isConfirmed ? 'Yes' : 'No'));
use JBZoo\Cli\CliRender;
$this->_(CliRender::list([
"It's like a title",
'Option Name' => 'Option Value',
'Key' => 'Value',
'Another Key #2' => 'Qwerty',
], '*')); // It's bullet character
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.