Symfony/Console para PHP: guia completo com exemplos
1. O que é e para que serve
Symfony/Console é um componente poderoso e flexível do framework Symfony, projetado para criar comandos de console (CLI) em PHP. Ele fornece aos desenvolvedores um conjunto completo de ferramentas para construir scripts de linha de comando interativos, estruturados e facilmente testáveis. Em vez de escrever scripts primitivos usando variáveis e funções globais, o Symfony/Console oferece uma abordagem orientada a objetos, baseada em classes de comando, entrada/saída (Input/Output) e um sistema de perguntas.
Para que serve? No desenvolvimento web moderno, comandos de console executam tarefas críticas: migrações de banco de dados, execução de filas, geração de código, limpeza de cache, envio de campanhas de e-mail e muitos outros processos em segundo plano. O Symfony/Console permite padronizar essas tarefas, tornando-as fáceis de ler, estender e manter. A biblioteca processa automaticamente argumentos e opções de comandos, gera ajuda, formata a saída e suporta formatação colorida, simplificando significativamente a vida do desenvolvedor.
Além disso, o Symfony/Console não está rigidamente vinculado ao framework Symfony. Ele pode ser usado em qualquer projeto PHP (Laravel, Yii, PHP puro) como um componente independente. Isso o torna o padrão de facto universal para criar ferramentas CLI no ecossistema PHP. Graças ao suporte integrado para testes (através do CommandTester) e ao modelo de eventos, você pode facilmente escrever testes de unidade para seus comandos e estender sua funcionalidade usando eventos.
2. Instalação
A instalação é feita através do gerenciador de dependências Composer. Abra o terminal na raiz do seu projeto e execute o comando:
composer require symfony/console
Se você estiver usando Symfony Flex (padrão para Symfony 4+), o pacote será configurado automaticamente. Para projetos sem Symfony, você precisará criar um arquivo bin/console (ou qualquer outro nome) e inicializar o aplicativo manualmente.
Após a instalação, verifique se a seguinte entrada apareceu no seu composer.json:
{
"require": {
"symfony/console": "^6.0"
}
}
3. Início rápido — exemplo funcional mínimo
Vamos criar um comando simples que exibe "Olá, Mundo!". Primeiro, crie o arquivo bin/console:
#!/usr/bin/env php
<?php
// bin/console
require __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;
// Cria o aplicativo
$application = new Application('My CLI App', '1.0.0');
// Registra o comando
$application->register('ola')
->setDescription('Exibe uma saudação')
->setCode(function (InputInterface $input, OutputInterface $output) {
$output->writeln('Olá, Mundo!');
});
// Executa o aplicativo
$application->run();
Agora torne o arquivo executável e execute-o:
chmod +x bin/console
php bin/console ola
Você verá no console: Olá, Mundo!
Este é um exemplo mínimo. Em projetos reais, os comandos são criados como classes separadas que estendem Command, garantindo uma melhor organização do código.
4. Principais métodos/funções/classes
Vamos explorar as principais classes e métodos da biblioteca. Para cada