Frameworks CLI para PHP: de scripts simples a aplicaciones de consola profesionales
Las aplicaciones de consola (CLI — Command Line Interface) siguen siendo una parte esencial del desarrollo moderno. Se utilizan para automatizar tareas, procesar datos, migraciones, ejecutar pruebas y administrar servidores. PHP, a pesar de su reputación como «lenguaje web», ofrece excelentes capacidades para crear potentes herramientas CLI. En este artículo, revisaremos los mejores frameworks y bibliotecas para desarrollar aplicaciones de consola en PHP, que le ayudarán a pasar de scripts simples a soluciones estructuradas, comprobables y escalables.
¿Por qué usar un framework CLI en lugar de un script simple?
Escribir un script de consola «desde cero» parece simple, pero rápidamente conduce a problemas:
- Procesamiento de argumentos: analizar
$argvy$argcmanualmente es tedioso y propenso a errores. - Salida de información: colores, barras de progreso, tablas — todo esto requiere una implementación separada.
- Estructura del código: es difícil organizar varios comandos en un solo archivo.
- Pruebas: los scripts de consola son difíciles de probar sin herramientas especiales.
Usar un framework resuelve estos problemas y proporciona una arquitectura lista, un contenedor DI, un sistema de eventos e integración con bibliotecas populares.
Symfony Console — el estándar de oro
Symfony Console es un componente del ecosistema Symfony que se ha convertido en el estándar de facto para crear aplicaciones CLI en PHP. Se utiliza en Laravel (a través de Artisan), Doctrine, Composer y muchos otros proyectos.
Instalación y ejemplo básico
composer require symfony/consoleCreemos un comando simple que salude al usuario:
<?php// greet.phprequire __DIR__ . '/vendor/autoload.php';
use Symfony\\Component\\Console\\Application;use Symfony\\Component\\Console\\Command\\Command;use Symfony\\Component\\Console\\Input\\InputInterface;use Symfony\\Component\\Console\\Output\\OutputInterface;use Symfony\\Component\\Console\\Input\\InputArgument;
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'); }
protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $output->writeln("¡Hola, <info>$name</info>!"); return Command::SUCCESS; }}
$application = new Application();$application->add(new GreetCommand());$application->run();Ejecución: php greet.php app:greet Juan mostrará ¡Hola, Juan! en color verde.
Características principales de Symfony Console
- Generación automática de ayuda: los comandos
listyhelpfuncionan «de fábrica». - Tipos de argumentos y opciones: obligatorios/opcionales, arrays, valores por defecto.
- Formato de salida: etiquetas
<info>,<comment>,<error>para color. - Barras de progreso y tablas: clases integradas
ProgressBaryTable. - Soporte para preguntas: entrada interactiva a través de
QuestionHelper. - Eventos y ciclo de vida: se puede interceptar la ejecución del comando.
Ejemplo con barra de progreso
use Symfony\\Component\\Console\\Helper\\ProgressBar;
protected function execute(InputInterface $input, Outpu También en la biblioteca
Generación de PDF en C++: bibliotecas, herramientas y ejemplos de código
Trabajo con S3 y almacenamiento en la nube en JavaScript (Node.js) — biblioteca @aws-sdk/client-s3
Migraciones de bases de datos en Rust: revisión de herramientas Diesel, SeaORM y sqlx
Entity Framework Core para C# (.NET): guía completa con ejemplos
Trabajo con XML en Go (Golang): paquete encoding/xml y alternativas