Download the PHP package webfiori/cli without Composer
On this page you can find all versions of the php package webfiori/cli. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package cli
Short Description Class library to simplify the process of creating command line based applications using PHP.
License MIT
Informations about the package cli
WebFiori CLI
Class library that can help in writing command line based applications with minimum dependencies using PHP.
Content
- Supported PHP Versions
- Features
- Quick Start
- Sample Application
- Installation
- Basic Usage
- Simple Command Example
- Command with Arguments
- Multi-Command Application
- Creating and Running Commands
- Creating a Command
- Running a Command
- Arguments
- Adding Arguments to Commands
- Accessing Argument Value
- Advanced Features
- Interactive Mode
- Input and Output Streams
- ANSI Colors and Formatting
- Progress Bars
- Table Display
- The
helpCommand- Setting Help Instructions
- Running
helpCommand - General Help
- Command-Specific Help
- Unit-Testing Commands
- Examples
Supported PHP Versions
| Build Status |
|---|
Features
- Easy Command Creation: Simple class-based approach to building CLI commands
- Argument Handling: Support for required and optional arguments with validation
- Interactive Mode: Keep your application running and execute multiple commands
- ANSI Output: Rich text formatting with colors and styles
- Input/Output Streams: Custom input and output stream implementations
- Progress Bars: Built-in progress indicators for long-running operations
- Table Display: Format and display data in clean, readable tables
- Help System: Automatic help generation for commands and arguments
- Unit Testing: Built-in testing utilities for command validation
- Minimal Dependencies: Lightweight library with minimal external requirements
Quick Start
Get up and running in minutes:
Sample Application
A complete sample application with multiple examples can be found here: 📁 View Sample Application
The sample application includes:
- Basic Commands - Simple command creation
- Arguments Handling - Working with command arguments
- User Input - Building interactive applications
- Multi-Command Apps - Complex applications with multiple commands
- Progress Bars - Visual progress indicators
- Table Display - Formatting data in tables
- Database Operations - Database CLI commands
Installation
Install WebFiori CLI using Composer:
Or add it to your composer.json:
Basic Usage
Simple Command Example
Create a basic command that outputs a message:
Usage:
Command with Arguments
Create a command that accepts and processes arguments:
Usage:
Multi-Command Application
Build applications with multiple commands:
Usage:
Creating and Running Commands
Creating a Command
First step in creating new command is to create a new class that extends the class WebFiori\Cli\Command. The class Command is a utility class which has methods that can be used to read inputs, send outputs and use command line arguments.
The class has one abstract method that must be implemented. The code that will exist in the body of the method will represent the logic of the command.
Running a Command
The class WebFiori\Cli\Runner is the class which is used to manage the logic of executing the commands. In order to run a command, an instance of this class must be created and used to register the command and start running the application.
To register a command, the method Runner::register() is used. To start the application, the method Runner::start() is used.
Now if terminal is opened and following command is executed:
The output will be the string Hi People!.
Arguments
Arguments is a way that can be used to pass values from the terminal to PHP process. They can be used to configure execution of the command. For example, a command might require some kind of file as input.
Adding Arguments to Commands
Arguments can be added in the constructor of the class as follows:
Arguments can be provided as an associative array or array of objects of type WebFiori\Cli\Argument. In case of associative array, Index is name of the argument and the value of the index is sub-associative array of options. Each argument can have the following options:
optional: A boolean. if set to true, it means that the argument is optional. Default is false.default: An optional default value for the argument to use if it is not provided.description: A description of the argument which will be shown if the commandhelpis executed.values: A set of values that the argument can have. If provided, only the values on the list will be allowed.
The class WebFiori\Cli\Option can be used to access the options.
Accessing Argument Value
Accessing the value of an argument is performed using the method Command::getArgValue(string $argName). If argument is provided, the method will return its value as string. If not provided, null is returned.
Advanced Features
Interactive Mode
Interactive mode is a way that can be used to keep your application running and execute more than one command using same PHP process. To start the application in interactive mode, add the argument -i when starting the application as follows:
This will show following output in terminal:
📖 View Interactive Mode Example
Input and Output Streams
WebFiori CLI supports custom input and output streams for advanced use cases:
ANSI Colors and Formatting
Add colors and formatting to your CLI output:
Progress Bars
Display progress for long-running operations:
Table Display
Display data in formatted tables:
Auto-Discovery
Automatically discover and register commands from a directory:
Factory for Dependency Injection
By default, auto-discovery instantiates commands using new $className(). If your commands require constructor dependencies, set a factory callable:
The factory receives the fully qualified class name and must return a Command instance. This works with any DI container or a simple closure.
The help Command
One of the commands which comes by default with the library is the help command. It can be used to display help instructions for all registered commands.
Note: In order to use this command, it must be registered using the method
Runner::register().
Setting Help Instructions
Help instructions are provided by the developer who created the command during its implementation. Instructions can be set on the constructor of the class that extends the class WebFiori\Cli\Command as a description. The description can be set for the command and its arguments.
Running help Command
Help command can be used in two ways, one way is to display a general help for the application and another one for specific command.
General Help
To show general help of the application, following command can be executed.
Output of this command will be as follows:
Note: Depending on registered commands, output may differ.
Command-Specific Help
To show help instructions for a specific command, the name of the command can be included using the argument --command-name as follows:
Output of this command will be as follows:
Unit-Testing Commands
The library provides the helper class WebFiori\Cli\CommandTestCase which can be used to write unit tests for different commands. The developer has to only extend the class and use utility methods to write tests. The class is based on PHPUnit.
The class has two methods which can be used to execute tests:
CommandTestCase::executeSingleCommand(): Used to run one command at a time and return its output.CommandTestCase::executeMultiCommand(): Used to register multiple commands, set default command and/or run one of registered commands.
First method is good to verify the output of one specific command. The second one is useful to simulate the execution of an application with multiple commands.
Both methods support simulating arguments vector and user inputs.
Examples
Explore comprehensive examples to learn different aspects of WebFiori CLI:
Basic Examples
- 📁 Basic Command - Create your first CLI command
- 📁 Command with Arguments - Handle command-line arguments
- 📁 User Input - Read and validate user input
- 📁 Output Formatting - Colors and text formatting
Advanced Examples
- 📁 Interactive Commands - Build interactive CLI applications
- 📁 Table Display - Format data in tables
- 📁 Progress Bars - Visual progress indicators
- 📁 File Processing - File manipulation commands
- 📁 Database Operations - Database CLI commands
Complete Applications
- 📁 Multi-Command Application - Full-featured CLI application
Quick Links
- 📖 All Examples - Browse all available examples
- 🚀 Sample App - Ready-to-run sample application
Ready to build amazing CLI applications? Start with the 📁 Basic Command Example and work your way up!