<h2>Introdução ao Packagist e Composer</h2>
<p>O Packagist é o repositório oficial de pacotes PHP, funcionando como um catálogo centralizado onde desenvolvedores compartilham código reutilizável. Quando você trabalha com Composer, o gerenciador de dependências padrão do PHP moderno, você está interagindo diretamente com o Packagist. A beleza dessa abordagem é que você não precisa reinventar a roda — pacotes populares como Laravel, Symfony e Monolog já resolvem problemas comuns de forma testada e confiável. Nesta aula, vamos explorar como encontrar, integrar e utilizar os pacotes mais importantes do ecossistema PHP.</p>
<h2>Instalando e Gerenciando Pacotes</h2>
<h3>Configuração Básica do Composer</h3>
<p>Antes de tudo, você precisa ter o Composer instalado em sua máquina. Após a instalação, criar um novo projeto é simples: basta executar <code>composer init</code> para gerar seu arquivo <code>composer.json</code>. Este arquivo é o coração do seu projeto — ele declara todas as dependências necessárias.</p>
<pre><code class="language-bash">composer init</code></pre>
<p>Isso gera um arquivo <code>composer.json</code> interativo. Alternativamente, você pode trabalhar com um <code>composer.json</code> já existente. Para instalar as dependências declaradas, execute:</p>
<pre><code class="language-bash">composer install</code></pre>
<p>Para adicionar um novo pacote, use <code>composer require</code>. Por exemplo, para adicionar o pacote Monolog (popular para logging):</p>
<pre><code class="language-bash">composer require monolog/monolog</code></pre>
<p>Isso atualiza automaticamente seu <code>composer.json</code> e cria o diretório <code>vendor/</code> com todos os arquivos necessários, além de gerar um arquivo <code>composer.lock</code> que garante versões consistentes entre ambientes.</p>
<h3>Entendendo Versionamento Semântico</h3>
<p>O versionamento semântico (semver) define como os pacotes evoluem: MAJOR.MINOR.PATCH. Na prática, <code>~1.2</code> permite atualizações até 1.999, enquanto <code>^1.2</code> permite até 2.0. Compreender isso é crucial para evitar quebras inesperadas:</p>
<pre><code class="language-json">{
"require": {
"monolog/monolog": "^2.0",
"guzzlehttp/guzzle": "~7.4"
}
}</code></pre>
<h2>Pacotes Populares Essenciais</h2>
<h3>Monolog: Logging Profissional</h3>
<p>Monolog é o padrão de logging em PHP. Você o usa para registrar eventos, erros e informações importantes com controle fino sobre handlers e níveis de severidade. Abaixo, um exemplo prático:</p>
<pre><code class="language-php"><?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handlers\StreamHandler;
$log = new Logger('meu_app');
$log->pushHandler(new StreamHandler('logs/app.log', Logger::DEBUG));
$log->info('Aplicação iniciada');
$log->error('Ocorreu um erro', ['usuario_id' => 123]);</code></pre>
<p>O primeiro argumento de <code>StreamHandler</code> especifica o arquivo de log, e o segundo define o nível mínimo de severidade a ser registrado.</p>
<h3>GuzzleHTTP: Requisições HTTP Simplificadas</h3>
<p>Fazer requisições HTTP é trivial com Guzzle. Em vez de cURL puro, você obtém uma API intuitiva e tratamento robusto de erros:</p>
<pre><code class="language-php"><?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://api.github.com/users/octocat');
$statusCode = $response->getStatusCode();
$body = json_decode($response->getBody(), true);
echo "Status: " . $statusCode . "\n";
echo "Login: " . $body['login'] . "\n";</code></pre>
<p>Guzzle trata exceções automaticamente, permite passar headers customizados, dados POST, autenticação e muito mais.</p>
<h3>PHPUnit: Testes Unitários de Qualidade</h3>
<p>Testar seu código é não-negociável em desenvolvimento profissional. PHPUnit é o framework padrão:</p>
<pre><code class="language-php"><?php
use PHPUnit\Framework\TestCase;
class CalculadoraTest extends TestCase
{
public function testSoma()
{
$calculadora = new Calculadora();
$resultado = $calculadora->somar(2, 3);
$this->assertEquals(5, $resultado);
}
public function testMultiplicacao()
{
$calculadora = new Calculadora();
$resultado = $calculadora->multiplicar(4, 5);
$this->assertEquals(20, $resultado);
}
}</code></pre>
<p>Execute com <code>vendor/bin/phpunit</code>. PHPUnit oferece assertions para qualquer cenário imaginável e integra com ferramentas de CI/CD.</p>
<h3>Dotenv: Variáveis de Ambiente Seguras</h3>
<p>Nunca coloque credenciais no código. O pacote <code>vlucas/phpdotenv</code> carrega variáveis de um arquivo <code>.env</code>:</p>
<pre><code class="language-php"><?php
require 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$dbHost = $_ENV['DB_HOST'];
$dbUser = $_ENV['DB_USER'];
$dbPass = $_ENV['DB_PASSWORD'];
echo "Conectando a: " . $dbHost . "\n";</code></pre>
<p>Seu arquivo <code>.env</code> (nunca comitido no Git):</p>
<pre><code>DB_HOST=localhost
DB_USER=root
DB_PASSWORD=senha_segura_aqui</code></pre>
<h2>Boas Práticas e Otimização</h2>
<p>A autoloading automática do Composer funciona através do arquivo <code>vendor/autoload.php</code>, que você inclui uma única vez no seu projeto. Mantenha seu <code>composer.json</code> limpo — adicione apenas pacotes que realmente precisa. Use <code>composer update</code> com cautela em produção; prefira <code>composer install</code> que respeita o <code>composer.lock</code>. Para verificar pacotes desatualizados, execute <code>composer outdated</code>. Sempre verifique a qualidade de um pacote antes de usá-lo: procure por testes, documentação adequada, comunidade ativa e atualizações regulares.</p>
<p>Organize suas dependências em <code>require</code> (necessárias em produção) e <code>require-dev</code> (apenas para desenvolvimento, como PHPUnit). Use <code>composer require --dev phpunit/phpunit</code> para adicionar ferramentas de desenvolvimento. Por fim, em ambientes de produção, sempre execute <code>composer install --no-dev --optimize-autoloader</code> para remover pacotes desnecessários e otimizar o carregamento de classes.</p>
<h2>Conclusão</h2>
<p>Você aprendeu que <strong>Packagist + Composer é a espinha dorsal do desenvolvimento PHP moderno</strong>, permitindo reutilizar código de qualidade sem reinventar a roda. <strong>Pacotes como Monolog, GuzzleHTTP e PHPUnit são essenciais</strong> — pratique com eles até dominá-los completamente. <strong>Compreenda versionamento semântico e boas práticas de segurança</strong> (variáveis de ambiente, separação dev/produção) para construir projetos profissionais e escaláveis.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://getcomposer.org/doc/" target="_blank" rel="noopener noreferrer">Documentação Oficial do Composer</a></li>
<li><a href="https://packagist.org/" target="_blank" rel="noopener noreferrer">Packagist - PHP Package Repository</a></li>
<li><a href="https://seldaek.github.io/monolog/" target="_blank" rel="noopener noreferrer">Monolog Documentation</a></li>
<li><a href="https://docs.guzzlephp.org/" target="_blank" rel="noopener noreferrer">Guzzle HTTP Client</a></li>
<li><a href="https://phpunit.de/" target="_blank" rel="noopener noreferrer">PHPUnit - The PHP Testing Framework</a></li>
</ul>