FW Guia Completo do Composer

Tudo o que você precisa saber sobre o gerenciador de dependências para PHP

História do Composer

O Composer foi criado por Nils Adermann e Jordi Boggiano e lançado em 1 de Março de 2012. Surgiu como resposta à necessidade de um gerenciador de dependências eficiente para a comunidade PHP, que até então não possuía uma ferramenta padrão para esta finalidade.

Inspirado no npm (Node.js) e no Bundler (Ruby), o Composer rapidamente se tornou o padrão de fato para gerenciamento de dependências em projetos PHP, sendo adotado por grandes frameworks como Laravel, Symfony e muitos outros.

Objetivos do Composer

O Composer foi desenvolvido com os seguintes objetivos principais:

Funções do Composer

O Composer executa diversas funções essenciais para o desenvolvimento PHP moderno:

Gerenciamento de Dependências

Instala e atualiza bibliotecas necessárias para seu projeto, mantendo o controle das versões compatíveis.

Autoloading de Classes

Gera automaticamente um autoloader para as classes do projeto e suas dependências, seguindo o padrão PSR-4.

Scripts e Eventos

Permite a execução de scripts em eventos específicos como pós-instalação ou pós-atualização.

Gerenciamento de Pacotes Globais

Oferece a possibilidade de instalar ferramentas CLI globalmente no sistema.

Bibliotecas que Funcionam com Composer

Praticamente todas as bibliotecas e frameworks PHP modernos suportam o Composer. Alguns exemplos populares:

Biblioteca/Framework Descrição Categoria
Laravel Framework PHP para desenvolvimento web Framework
Symfony Framework PHP e conjunto de componentes Framework
CodeIgniter Framework PHP leve para desenvolvimento web Framework
Yii Framework PHP de alto desempenho Framework
CakePHP Framework PHP para desenvolvimento rápido Framework
Guzzle Cliente HTTP para fazer requisições HTTP
PHPUnit Framework de testes para PHP Testes
PHPSpec Ferramenta de especificação para PHP Testes
Codeception Framework de teste completo para PHP Testes
Monolog Biblioteca de logging Logging
Doctrine Conjunto de ferramentas para trabalhar com bancos de dados ORM
Eloquent ORM incluído no Laravel ORM
Propel ORM alternativo para PHP ORM
Twig Motor de templates para PHP Templates
Blade Motor de templates do Laravel Templates
Smarty Motor de templates tradicional para PHP Templates
Intervention Image Biblioteca para manipulação de imagens Imagens
Imagine Outra biblioteca para processamento de imagens Imagens
Flysystem Abstração para sistemas de arquivos Arquivos
PHP Mailer Biblioteca para envio de emails Email
Swift Mailer Alternativa para envio de emails Email
Carbon API de extensão para DateTime Datas
Faker Geração de dados falsos para testes Testes
PHP Dotenv Carrega variáveis de ambiente de arquivos .env Configuração
Psr Log Implementação da interface PSR-3 para logging Logging
Ramsey UUID Geração de UUIDs conforme RFC 4122 Utilitários
PHP CS Fixer Ferramenta para corrigir estilo de código PHP Qualidade
PHPStan Ferramenta de análise estática para PHP Qualidade
PHP CodeSniffer Detecta violações de padrões de codificação Qualidade
PHP Insights Análise de qualidade de código PHP Qualidade
Laravel Debugbar Barra de debug para Laravel Debug
Whoops Framework de tratamento de erros Debug
PHPBench Framework de benchmarking para PHP Performance
Predis Cliente Redis flexível e completo para PHP Cache
PHP Redis Extensão PHP para Redis Cache
JWT Biblioteca para trabalhar com JSON Web Tokens Autenticação
OAuth2 Server Implementação de servidor OAuth2 Autenticação
Laravel Passport Implementação de OAuth2 para Laravel Autenticação
Laravel Sanctum Sistema de autenticação para APIs SPA Autenticação
Bootstrap Framework front-end para desenvolvimento responsivo Front-end
Tailwind CSS Framework CSS utility-first Front-end
Vue.js Framework JavaScript progressivo Front-end
React Biblioteca JavaScript para interfaces de usuário Front-end
Alpine.js Framework JavaScript minimalista Front-end
Laravel Mix Empacotador de assets para Laravel Build
Webpack Encore Empacotador de assets para Symfony Build
PHP Documentor Ferramenta de geração de documentação Documentação
Swagger PHP Implementação do OpenAPI para PHP Documentação
Laravel Excel Exportação e importação de Excel no Laravel Excel
PhpSpreadsheet Biblioteca para ler e escrever arquivos de planilhas Excel
Pest Framework de testing elegante para PHP Testes
Laravel Dusk Ferramenta de teste de browser para Laravel Testes
Stripe PHP Biblioteca oficial da Stripe para pagamentos Pagamentos
Pagar.me Biblioteca para integração com Pagar.me Pagamentos
PayPal PHP SDK SDK oficial do PayPal para PHP Pagamentos
MercadoPago SDK SDK oficial do MercadoPago para PHP Pagamentos
Laravel Cashier Biblioteca de assinaturas para Laravel Pagamentos
PHP AMQP Cliente para protocolo AMQP (RabbitMQ) Filas
Laravel Horizon Dashboard e sistema de configuração para Redis queues Filas
Laravel Websockets Implementação de WebSockets para Laravel WebSockets
Ratchet Biblioteca WebSocket para PHP WebSockets
PHP GD Biblioteca de manipulação de imagens (embutida) Imagens
PHP Imagick Extensão para ImageMagick (embutida) Imagens

Exemplo Prático: Usando o Composer com a Biblioteca Guzzle

Vamos ver na prática como utilizar o Composer para instalar e usar uma biblioteca. Neste exemplo, usaremos o Guzzle, um cliente HTTP popular.

1 Criando o projeto e inicializando o Composer

Primeiro, crie uma pasta para seu projeto e navegue até ela:

mkdir meu-projeto
cd meu-projeto

Agora, inicialize o Composer para criar o arquivo composer.json:

composer init

Siga as instruções interativas para configurar seu projeto. Você pode pressionar Enter para usar os valores padrão se desejar.

2 Instalando o Guzzle

Com o composer.json criado, agora podemos instalar o Guzzle:

composer require guzzlehttp/guzzle

Este comando fará o seguinte:

  • Baixará a biblioteca Guzzle e suas dependências
  • Atualizará o arquivo composer.json para incluir o Guzzle como dependência
  • Criará/atualizará o arquivo composer.lock para travar as versões exatas
  • Gerará o autoloader para carregar as classes automaticamente

3 Estrutura do projeto após a instalação

Após a instalação, sua estrutura de pastas deve estar assim:

meu-projeto/
├── vendor/
│   ├── autoload.php
│   ├── composer/
│   └── guzzlehttp/
├── composer.json
├── composer.lock
└── (seus arquivos de projeto)

4 Criando um arquivo para usar o Guzzle

Crie um arquivo chamado exemplo.php com o seguinte conteúdo:

<?php
// Inclui o autoloader do Composer
require 'vendor/autoload.php';

use GuzzleHttp\Client;

// Cria uma instância do cliente Guzzle
$client = new Client();

// Faz uma requisição HTTP GET
$response = $client->request('GET', 'https://api.github.com/users/octocat');

// Exibe o código de status da resposta
echo "Status: " . $response->getStatusCode() . "\n";

// Exibe o tipo de conteúdo
echo "Tipo: " . $response->getHeaderLine('content-type') . "\n";

// Exibe o corpo da resposta
echo "Corpo: " . $response->getBody() . "\n";
?>

5 Executando o exemplo

Execute o script PHP para ver o Guzzle em ação:

php exemplo.php

Você deverá ver uma resposta similar a esta:

Status: 200
Tipo: application/json; charset=utf-8
Corpo: {"login":"octocat","id":583231,"node_id":"MDQ6VXNlcjU4MzIzMQ==",...}

6 composer.json resultante

Seu arquivo composer.json deve estar similar a este após a instalação:

{
    "name": "vendor/meu-projeto",
    "description": "Exemplo de uso do Guzzle com Composer",
    "require": {
        "guzzlehttp/guzzle": "^7.4"
    },
    "autoload": {
        "psr-4": {
            "MeuProjeto\\": "src/"
        }
    }
}

Este exemplo demonstra como o Composer simplifica o processo de adicionar e gerenciar dependências em projetos PHP. Com poucos comandos, você pode adicionar bibliotecas poderosas ao seu projeto e começar a usá-las imediatamente.

Servidores que Aceitam Composer

O Composer pode ser executado em qualquer servidor que atenda aos requisitos básicos:

Quanto aos provedores de hospedagem, a maioria dos serviços modernos suporta Composer, incluindo:

Composer é Gratuito?

Sim, o Composer é completamente gratuito e de código aberto. Ele é distribuído sob a licença MIT, que permite uso comercial, modificação, distribuição e uso privado sem quaisquer custos.

O Packagist, o repositório principal do Composer, também é gratuito para uso público. Para pacotes privados, existem serviços pagos como Private Packagist, mas o Composer em si não tem custos.

Capacidade do Composer

O Composer é capaz de gerenciar projetos de qualquer tamanho, desde pequenos scripts até grandes aplicações empresariais com centenas de dependências.

Limites Práticos

Otimizações

Para projetos maiores, o Composer oferece otimizações como:

Arquivos Controlados pelo Composer

O Composer utiliza principalmente dois arquivos para gerenciar as dependências do projeto:

composer.json

Arquivo de configuração onde você define:

Exemplo de composer.json:

{
    "name": "vendor/project",
    "description": "My project",
    "type": "project",
    "require": {
        "php": "^7.4|^8.0",
        "laravel/framework": "^8.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    }
}
            

composer.lock

Arquivo gerado automaticamente que registra as versões exatas instaladas. Isso garante que todas as instalações futuras usarão as mesmas versões, garantindo consistência entre ambientes.

Comandos para Terminal

Principais comandos do Composer para uso no terminal:

Comando Descrição
composer init Cria um arquivo composer.json interativamente
composer install Instala todas as dependências do projeto
composer update Atualiza as dependências conforme o composer.json
composer require vendor/pacote Adiciona um novo pacote às dependências
composer remove vendor/pacote Remove um pacote das dependências
composer dump-autoload Regera o autoloader
composer show Lista todas as dependências instaladas
composer search termo Procura por pacotes no Packagist
composer self-update Atualiza o Composer para a última versão

Onde Usar o Composer

O Composer pode ser utilizado em diversos ambientes e cenários:

Desenvolvimento Local

Em máquinas de desenvolvimento, instalado globalmente para criar e manter projetos PHP.

Servidores de Produção

Para deploy de aplicações, instalando dependências diretamente no servidor ou através de integração contínua.

Integração Contínua/CI

Em pipelines de CI/CD para instalar dependências antes de executar testes ou deploy.

Contêineres Docker

Dentro de contêineres Docker para gerenciar dependências de aplicações PHP.

Composer no DirectAdmin

Para usar o Composer no DirectAdmin, siga estes passos:

1. Acesse via SSH

Use o acesso SSH fornecido pelo seu host para conectar ao servidor.

2. Instale o Composer

Execute os seguintes comandos:

cd /usr/local/bin
curl -sS https://getcomposer.org/installer | php
mv composer.phar composer
chmod +x composer
            

3. Use em seu projeto

Navegue até a pasta do seu projeto e execute os comandos do Composer:

cd /domains/seudominio.com/public_html
composer install
            

Nota: Alguns hosts podem exigir que você use uma versão específica do PHP. Nesse caso, use php7.4 /usr/local/bin/composer install (substitua 7.4 pela versão desejada).

Usando Composer com PuTTY

O PuTTY é um cliente SSH para Windows que permite acessar servidores remotos. Para usar o Composer via PuTTY:

1. Conecte-se ao servidor

Abra o PuTTY, digite o endereço do servidor e faça login com suas credenciais.

2. Navegue até o diretório do projeto

Use comandos como cd para navegar até a pasta do seu projeto.

3. Execute comandos do Composer

Digite os comandos do Composer normalmente, por exemplo:

composer install
composer update
composer require vendor/package
            

Tipo de Acesso Necessário

Para executar o Composer via PuTTY, você precisa de: