Tudo começou com esse tweet:
Dica pra você, desenvolvedor #PHP que está chegando agora: estude sobre #Composer e #Git o quanto antes
— Thiago Belem (@TiuTalk) October 7, 2012
E durante a semana seguinte rolou a entrevista com os palestrantes do PHP’n Rio 2012:
Nessa entrevista, um dos assuntos que eu repeti várias vezes, foi sobre a organização de projetos e mencionei o Composer algumas vezes.
Mas afinal, o que é o Composer?
Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs and it will install them in your project for you.
O Composer nada mais é do que um gerenciador de dependências… Com ele você define a lista de bibliotecas (e versões) das quais o seu projeto depende, e ele cuida da instalação, organização e “inclusão” das mesmas.
Gerenciadores de pacotes (ou dependências) são muito comuns em outras linguagens, como é o caso do Composer pra fazer isso no PHP! :)
Mas como assim, Arnaldo?
Suponhamos que você esteja trabalhando num projeto que faça uso (dependa) do Twig… Mas esse exemplo vale pra qualquer biblioteca, seja o PHPThumb, WideImage, MongoDB ou qualquer outra.
Se o seu projeto estiver versionado (seja SVN ou Git), essas bibliotecas provavelmente estão dentro do seu repositório, em versões “congeladas” e caso você queira atualizá-las você tem que fazer isso manualmente e depois atualizar seu repositório, acertei?
Já com o Composer, essas bibliotecas são gerenciadas de forma independente do seu projeto.
Ele funciona da seguinte forma:
- Você tem um projeto que depende de uma lista de bibliotecas
- Algumas dessas bibliotecas dependem de outras bibliotecas
- Você declara apenas as bibliotecas das quais o seu projeto depende
- O Composer encontra quais versões e quais pacotes precisam ser instalados e instala-os pra você (fazendo o download para dentro do seu projeto)
Passo 1 - Instalando o Composer
Você pode instalar o Composer de duas formas: localmente (apenas para um projeto) ou de forma global (acessível para todos os projetos).
Para instalar localmente, você executa o seguinte comando:
Isso irá fazer o download do arquivo composer.phar (que é o executável que traz todas as funcionalidades do nosso amigo):
Arquivos .phar são aplicações PHP encapsuladas em um único arquivo, mais informações aqui: php.net/manual/en/intro.phar.php
Agora você já pode usar o Composer através do comando php composer.phar, mas se você quiser tornar essa instalação global, e fazer tudo através do comando composer, mova o executável para o diretório de executáveis do sistema (UNIX):
Caso tenha alguma dúvida sobre a instalação, recomendo a leitura da documentação oficial: getcomposer.org/doc/00-intro.md
Passo 2 - Declarando dependências
Agora que você já tem o Composer funcionando (seja via uma instalação local ou global), você precisa definir as dependências do seu projeto.
O Composer trabalha com um repositório de pacotes, o Packagist… É lá que você encontra o nome e versão dos pacotes que pode usar no seu projeto.
Como dito anteriormente, nosso projeto irá usa a última versão do Doctrine e do Twig, e definimos essas dependências no arquivo composer.json, na raiz do projeto:
Nesse arquivo estamos informando ao Composer que nosso projeto depende de duas bibliotecas:
- Doctrine -- Qualquer versão do branch 2.x, em estado beta
- Twig -- Qualquer versão do branch 1.x, em estado stable (estável)
Com isso você já aprende a sintaxe de versões, que poderia ser “1.1.2@dev”, “2.0@beta”, “2.x” ou “2.x@beta” ou “*” (para a última versão stable lançada) e “*@beta” para a última versão beta.
Passo 3 - Instalando as bibliotecas
Com essas dependências definidas, rodamos “php composer.phar install” (se a sua instalação foi local) ou “composer install” (se a sua instalação foi global)… e voila!
O Composer acabou de baixar todos os pacotes necessários, e suas dependências!
Perceba que o doctrine/orm depende de outros dois pacotes: symfony/console e doctrine/dbal, que por sua vez depende do doctrine/common… Mas o Composer cuidou disso pra você! :)
Os pacotes instalados foram todos colocados em uma pasta “vendor”, e dentro dele você pode notar o arquivo autoload.php com o seguinte código:
É aqui que toda a mágica acontece! Esse é o arquivo que vai garantir que seu projeto tenha acesso às bibliotecas.
Passo 4 - Usando as bibliotecas
Agora é só incluir o autoload.php em qualquer lugar do seu projeto e sair usando as bibliotecas:
Usando o Doctrine
Não vou entrar nos detalhes de utilização do Doctrine, apenas percebam que eu só fiz o include/require do autoload.php e saí usando as classes.
Para mais informações sobre o Doctrine, consulte a documentação oficial: www.doctrine-project.org/
Usando o Twig
O resultado vai ser uma mensagem “Olá, Thiago!”.
Para mais informações sobre o Twig, consulte a documentação oficial: twig.sensiolabs.org/documentation
Viram como é fácil? :)
Finalizando
Espero realmente que vocês tenham entendido o poder que há por trás do Composer, e que procurem fazer uso dessas maravilhosas ferramentas open-source que estão à nossa disposição.
Acredito que muitos de vocês (meus amados leitores) ainda estão começando na área, mas é esse tipo de ferramenta que vai te tornar um profissional cada vez melhor e atualizado.
Não se esqueça de deixar seu comentário dizendo o que achou do Composer e se acha que ele vai fazer alguma diferença nos seus projetos.
Um grande abraço e até a próxima! :)