CLI-frameworks para PHP: creando potentes aplicaciones de consola
El desarrollo moderno en PHP no se limita a aplicaciones web. Cada vez más, los desarrolladores necesitan crear herramientas de consola (CLI): procesadores de colas, migraciones, generadores de informes, analizadores de datos. Para estas tareas existen frameworks especializados que simplifican la creación de comandos de consola, el procesamiento de argumentos, el formateo de la salida y la gestión de dependencias.
Principales CLI-frameworks para PHP
- Symfony Console — el componente más popular de Symfony, utilizado en Laravel, Drupal, Composer y cientos de otros proyectos.
- Laravel Zero — micro-framework basado en Laravel, optimizado para aplicaciones CLI.
- CLIFramework — framework ligero con soporte para autocompletado en Zsh/Bash.
- PHP CLI Tools — biblioteca minimalista para scripts simples.
Symfony Console: el estándar universal
El componente symfony/console es el estándar de facto para aplicaciones CLI en PHP. Proporciona un conjunto completo de herramientas para crear comandos, incluyendo:
- Análisis automático de argumentos y opciones de línea de comandos.
- Salida formateada con soporte para colores, tablas y barras de progreso.
- Preguntas interactivas y autocompletado.
- Sistema flexible de eventos y ciclo de vida del comando.
// Ejemplo de un comando simple en Symfony Console<?php// archivo: 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('Saluda al usuario') ->addArgument('name', InputArgument::REQUIRED, 'Nombre del usuario') ->addOption('yell', null, null, 'Mostrar en mayúsculas'); }
protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $message = "¡Hola, $name!";
if ($input->getOption('yell')) { $message = strtoupper($message); }
$output->writeln($message); return Command::SUCCESS; }}
// Ejecución: php bin/console app:greet Iván --yellLaravel Zero: Laravel para la línea de comandos
Laravel Zero es un micro-framework que traslada la comodidad de Laravel (Eloquent ORM, Artisan, Blade, tareas programadas) al mundo CLI. Es ideal para crear utilidades de consola independientes que no requieren interfaz web.
Características clave de Laravel Zero:
- Sintaxis familiar de comandos Artisan.
- Soporte integrado para bases de datos (SQLite, MySQL).
- Planificador de tareas (funcionalidad similar a Cron).
- Formateo de salida con tablas y barras de progreso.
- Posibilidad de compilar en un único archivo PHAR.
// Ejemplo de comando en Laravel Zero<?php// archivo: app/Commands/ExportUsers.phpnamespace App\\Commands;
use Illuminate\\Console\\Command;use App\\Models\\User;
class ExportUsers extends Command{ protected $signature = 'export:users {--format=csv : Formato de salida (csv/json)}'; protected $description = 'Exporta la lista de usuarios';
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 = ['
``` También en la biblioteca
Limitación de tasa en C++: bibliotecas y herramientas para control de solicitudes
Mocha para JavaScript (Node.js): guía completa con ejemplos
GuzzleHTTP/Promises PHP: guía completa con ejemplos prácticos
Envío de email en C# (.NET) usando SmtpClient y MailKit
Generación de códigos QR en C++: biblioteca QR-Code-generator