No dia 20 de Setembro de 2014 ministrei uma palestra sobre o gerenciamento de dependências em PHP com o composer e este post visa abordar os detalhes da parte prática que foi realizada na mesma.
O slide da apresentação está no Slideshare e este post é a complementação do slide #14.
Feito isto, como root, mova o arquivo composer.phar para /usr/local/bin apenas removendo a extensão .phar para simplificar o uso. Desta forma o arquivo será movido de ~/composer.phar para /usr/local/bin/composer e poderá ser chamado de qualquer ponto do seu Sistema Operacional apenas digitando composer no terminal. A imagem abaixo ilustra o procedimento descrito.
Tudo pronto para utilizar o Composer no Netbeans!
Com isso cria-se um projeto em PHP e após isto, basta clicar com o direito do mouse, ir até a seção do Composer e clicar em "Init".
Com isto temos agora o esqueleto do composer.json que como mencionado na palestra, é o arquivo onde são definidas nossas dependências.
Como é perceptível, o require está vazio, isto porque não definimos nenhuma dependência ainda, faremos isto agora.
Repare bem que existem duas seções informando dependências, uma delas é "require" e a outra é "require-dev", ambas servem para declarar bibliotecas que utilizaremos em nosso projeto. A grande diferença é que a "require-dev" serve somente para o ambiente de desenvolvimento, neste caso estamos informando que precisamos do PHPUnit, um framework de testes unitários para o PHP e como bem sabemos, os testes unitários devem ser executados somente no ambiente de desenvolvimento, não é preciso que este framework esteja presente no ambiente de produção.
Para realizar a distinção da instalçao (ambiente de desenvolvimento x ambiente de produção) podemos realizar o install ou update do composer apenas passando como parâmetro --no-dev em ambiente de produção. Com este parâmetro o Composer instala somente o que está dentro de "require" ignorando qualquer dependência de "require-dev".
A imagem abaixo ilustra a instalação em modo de produção através do terminal.
A imagem abaixo mostra a mesma instalação em ambiente de produção mas desta vez através do Netbeans.
E a imagem abaixo ilustra como ficou a estrutura de pasta após a instalação em ambiente de produção.
Também temos de testar a instalação das dependências para o modo de desenvolvimento. Para que isto ocorra, basta que via terminal, seja apenas rodado o comando composer install ou composer update sem nenhum parâmetro. Ao não fornecer nenhum parâmetro, o composer instala tudo que esteja registrado como dependência, estando elas em "require" ou "require-dev".
No Netbeans o processo é semelhante ao do modo produção, apenas difere que a oção "Install (dev)" ou "Update (dev)" deve ser selecionada.
Após a instalação/atualização a nova estrutura de pastas será algo como a imagem abaixo.
Existem muito mais vendors do que na instalação em modo de produção e isto é normal, pois apenas requisitamos a instalação do PHPUnit que por sua vez possui outras dependências (symfony[...], sebastian[...]) e estas possuem outras dependências ainda no entanto para nós isto não interessa, interessa apenas que definimos que se faz necessário em nosso projeto (PHPUnit) e ele está presente com tudo que precisa para funcionar.
<?php
//index.php
header('Content-type: text/html; charset=utf8');
require './vendor/autoload.php';
A partir de agora, qualquer recurso que esteja gerenciado pelo Composer já pode ser utilizado, veja o exemplo:
<?php
//index.php
header('Content-type: text/html; charset=utf8');
require './vendor/autoload.php';
$estadosBrasileiros = BrazilianHelper\StateHelper::getHtmlForSelectElement();
?>
<select name="estados">
<option value="">-- Selecione um estado --</option>
<?php echo $estadosBrasileiros; ?>
</select>
E seu resultado:
"config": {
"vendor-dir": "bibliotecas-de-terceiros"
}
E ao realizar a instalaçãoatualização do composer uma nova pasta é criada (se a vendor já existir) chamada bibliotecas-de-terceiros que conterá tudo que o composer instalar.
Note que agora existem duas pastas com tudo que declaramos como dependência, como a que realmente queremos utilizar neste momento é a bibliotecas-de-terceiros a pasta vendor pode simplesmente ser removida. Existe um detalhe que somente quando já fora realizada uma instalação prévia é que existirão duas pastas com as mesmas bibliotecas, caso seja realizada a primeira instalação já com a configuração de onde os vendor ficarão, não será criada a pasta vendor.
Se quiser saber mais sobre o Composer, siga os links contidos nos slides apresentados no evento.