CLI frameworks for PHP: building powerful console applications
Modern PHP development is not limited to web applications. Developers increasingly need to create console (CLI) tools: queue handlers, migrations, report generators, data parsers. For these tasks, there are specialized frameworks that simplify creating console commands, argument handling, output formatting, and dependency management.
Main CLI frameworks for PHP
- Symfony Console — the most popular component from Symfony, used in Laravel, Drupal, Composer and hundreds of other projects.
- Laravel Zero — a micro-framework based on Laravel, optimized for CLI applications.
- CLIFramework — a lightweight framework with Zsh/Bash autocompletion support.
- PHP CLI Tools — a minimalist library for simple scripts.
Symfony Console: the universal standard
The symfony/console component is the de facto standard for CLI applications in PHP. It provides a complete set of tools for creating commands, including:
- Automatic parsing of command line arguments and options.
- Formatted output with support for colors, tables, and progress bars.
- Interactive questions and autocompletion.
- Flexible event system and command lifecycle.
// Example of a simple command in Symfony Console<?php// file: src/Command/GreetCommand.phpnamespace App\\Command;
use Symfony\\Component\\Console\\Command\\Command;use Symfony\\Component\\Console\\Input\\InputArgument;use Symfony\\Component\\Console\\Input\\InputInterface;use Symfony\\Component\\Console\\Output\\OutputInterface;
class GreetCommand extends Command{ protected static $defaultName = 'app:greet';
protected function configure(): void { $this ->setDescription('Greets the user') ->addArgument('name', InputArgument::REQUIRED, 'User name') ->addOption('yell', null, null, 'Output in uppercase'); }
protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $message = "Hello, $name!";
if ($input->getOption('yell')) { $message = strtoupper($message); }
$output->writeln($message); return Command::SUCCESS; }}
// Run: php bin/console app:greet Ivan --yellLaravel Zero: Laravel for the command line
Laravel Zero is a micro-framework that brings the convenience of Laravel (Eloquent ORM, Artisan, Blade, scheduled tasks) to the CLI world. It is ideal for creating standalone console utilities that do not require a web interface.
Key features of Laravel Zero:
- Familiar Artisan command syntax.
- Built-in database support (SQLite, MySQL).
- Task scheduler (Cron-like functionality).
- Output formatting using tables and progress bars.
- Ability to compile into a single PHAR file.
// Example command in Laravel Zero<?php// file: app/Commands/ExportUsers.phpnamespace App\\Commands;
use Illuminate\\Console\\Command;use App\\Models\\User;
class ExportUsers extends Command{ protected $signature = 'export:users {--format=csv : Output format (csv/json)}'; protected $description = 'Exports the list of users';
public function handle(): int { $users = User::all(['id', 'name', 'email']); $format = $this->option('format');
if ($format === 'json') { $this->line($users->toJson(JSON_PRETTY_PRINT)); } else { $headers = [' Also in library
Geolocation and Maps in C# (.NET): Libraries, Examples, and Recommendations
Task Scheduler in C# (.NET): Quartz.NET, Hangfire and Coravel
Machine Learning in PHP: Overview of Libraries and Tools
Task Queues in C# (.NET): System.Threading.Channels and TPL Dataflow
Working with Images in Rust: resize and crop with the image library