Frameworks CLI para PHP: de scripts simples a aplicações de console profissionais
As aplicações de console (CLI — Command Line Interface) continuam sendo uma parte essencial do desenvolvimento moderno. Elas são usadas para automatizar tarefas, processar dados, migrações, executar testes e administrar servidores. O PHP, apesar de sua reputação de "linguagem web", oferece excelentes oportunidades para criar ferramentas CLI poderosas. Neste artigo, veremos os melhores frameworks e bibliotecas para desenvolver aplicações de console em PHP, que o ajudarão a passar de scripts simples para soluções estruturadas, testáveis e escaláveis.
Por que usar um framework CLI em vez de um script simples?
Escrever um script de console "do zero" parece simples, mas rapidamente leva a problemas:
- Processamento de argumentos: analisar
$argve$argcmanualmente é tedioso e propenso a erros. - Saída de informações: cores, barras de progresso, tabelas — tudo isso requer implementação separada.
- Estrutura do código: é difícil organizar vários comandos em um único arquivo.
- Testes: scripts de console são difíceis de testar sem ferramentas especiais.
Usar um framework resolve esses problemas e fornece uma arquitetura pronta, contêiner DI, sistema de eventos e integração com bibliotecas populares.
Symfony Console — o padrão ouro
Symfony Console é um componente do ecossistema Symfony que se tornou o padrão de facto para criar aplicações CLI em PHP. Ele é usado no Laravel (através do Artisan), Doctrine, Composer e muitos outros projetos.
Instalação e exemplo básico
composer require symfony/consoleVamos criar um comando simples que cumprimenta o usuário:
<?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('Cumprimenta o usuário') ->addArgument('name', InputArgument::REQUIRED, 'Nome do usuário'); }
protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $output->writeln("Olá, <info>$name</info>!"); return Command::SUCCESS; }}
$application = new Application();$application->add(new GreetCommand());$application->run();Execução: php greet.php app:greet João exibirá Olá, João! com cor verde.
Principais recursos do Symfony Console
- Geração automática de ajuda: os comandos
listehelpfuncionam "prontos para uso". - Tipos de argumentos e opções: obrigatórios/opcionais, arrays, valores padrão.
- Formatação de saída: tags
<info>,<comment>,<error>para cores. - Barras de progresso e tabelas: classes integradas
ProgressBareTable. - Suporte a perguntas: entrada interativa através de
QuestionHelper. - Eventos e ciclo de vida: é possível interceptar a execução do comando.
Exemplo com barra de progresso
use Symfony\\Component\\Console\\Helper\\ProgressBar;
protected function execute(InputInterface $input, Outpu