CakePHP e Composer

Post publicado em 18/02/2014 00:52 Última atualização em 18/06/2015 01:34

logo-composer-transparent Recentemente tenho trabalhado bastante com o composer e estou gostando muito. Na verdade uma das melhores coisas que temos no PHP atualmente, em minha opinião. Neste post vou mostrar como utilizar o composer junto do CakePHP. Pra começar, vai uma ressalva. O CakePHP instala seus plugins dentro de /app/Plugin no entanto o instalador do Cake no composer instala-os na raíz de sua aplicação ou seja, /Plugin. Isto é facilmente contornado apenas adicionando algumas configurações no arquivo composer.json que mostrarei a seguir. Primeiramente criarei um projeto definindo-o com o Framework CakePHP na IDE Netbeans. Se você não usa o Netbeans ou não sabe que existe um plugin do Cake para o mesmo sugiro a assistir este vídeo CakePHP - Instalação - parte 3 - instalando via Netbeans. Clicando em Novo, selecione o tipo do projeto (PHP) 1-novo-projeto-1   Em seguida defina o nome do projeto, caminho, versão do PHP, encoding e clique em Next. 2-novo-projeto-2 Agora basta definir as configurações de execução (na dúvida aceite o que o Netbeans lhe fornece por padrão) e clique em Next. 3-novo-projeto-3   Agora (se você possuir o plugin do CakePHP para Netbeans disponível para download aqui ou pelo próprio gerenciador de plugins do Netbeans), selecione CakePHP, na definição do arquivo database.php clique em Set Detail, informe todos os seus dados de conexao, clique em Ok, selecione a versão do Cake que deseja utilizar e clique em Finish. 4-novo-projeto-4 Agora o Netbeans trabalhará para clonar e descompactar o CakePHP. Após a correta descompactação o Netbeans abre automaticamente o arquivo core.php, pode ignorar. Abra o arquivo composer.json que já vem por padrão na pasta raiz do seu projeto. Ao abrir você notará que já existem algumas dependências configuradas pela equipe do framework e pode adicionair qualquer dependência que deseje. Como mencionado, por padrão o instalador do Cake que vem junto do composer instala os plugins na pasta /Plugin no entanto o Cake trabalha por padrão com os plugins na pasta /app/Plugin. Isto é facilmente contornado de duas formas. A primeira é definindo via bootstrap.php onde serão carregados os plugins e a outra é definindo diretamente no arquivo do composer. Esta última será a abordada agora. Adicionaremos os plugins DebugKit e Migrations e os direcionaremos para as pastas /app/Plugin/DebugKit e /app/Plugin/Migrations respectivamente como mostra na imagem a seguir. 5-definicao-composer   A seguir a partir do shell perceba a estrutura de pastas e note que apenas existe o arquivo composer.json referente ao Composer, mas logo existirá os arquivos composer.phar e composer.lock. 6-estrutura-pasta   Acessando https://get.composer.org/download é possível obter a versão mais recente do composer através de uma das formas de download disponíveis no site. Aqui optei por baixar via cURL. Copie e cole o endereço desejado no shell, pressione Enter e aguarde o download finalizar. Após finalizado se verificar novamente a estrutura de pastas perceberá que agora existe o arquivo composer.phar que é o "executável" do composer. 7-instala-estrutura   Agora basta rodar o comando php composer.phar install e aguardar a instalação ser concluída. Normalmente demora um pouco, mas ainda é algo comum no composer. Na imagem a seguir diminuí um pouco a fonte do terminal para que coubesse todo o log de instalação do composer. 8-instalacao-composer   Agora se verificar a estrutura de arquvos e pastas dentro de /app/Plugin veremos que os plugins que foram definidos no composer.json estão devidamente alocados no caminho que definimos em installer-paths. 9-plugins-instalados   É isso, espero ter ajudado de alguma forma e até a próxima ;) [UPDATE] Após um Pull Request realizado por Ypicot no plugin Debug Kit do CakePHP, o core developer do Cake, Mark Story juntamente com Ceeram e ADmad após testes nos informaram o porque de os plugins do Cake serem instalados na pasta raiz do seu projeto (Plugin) e não em app/Plugin. A instalação é feita desta forma porque se torna imcompatível com o composer deixar o arquivo composer.json dentro da pasta app. Se o arquivo composer.json ficasse na pasta app os plugins seriam instalados naturalmente em app/Plugin no entanto dentro de app também exisitira a pasta vendor (criada pelo composer). Isto inviabilizaria a disponibilidade do CakePHP como um pacote do composer. Com isso o composer.json foi deixado na raiz do projeto mesmo. Para você utilizar os plugins do Cake através do composer você pode utilizar o exemplo fornecido acima ou definindo no seu arquivo bootstrap.php os diretórios onde os plugins se encontram.

App::build(array('Plugin' => array(ROOT . '/Plugin/', ROOT . '/app/Plugin/')));
Segue a thread aberta no github: https://github.com/cakephp/debug_kit/pull/149   Recomendo também a leitura de Repositório git em pasta existente


Scroll down