No último post eu mostrei rapidamente como o CakePHP facilita a vida do programador. Mas o modo que eu mostrei realmente não é o mais adequado para quem quer fazer alguma coisa mais séria. Nesse post eu pretendo mostrar como é possível utilizar o CakePHP com o gerenciador de dependências Composer.
ESTE É UM POST ANTIGO
Este post foi importado do antigo blog e o seu conteúdo não foi revisado. O conteúdo deve estar desatualizado e a formatação pode apresentar problemas.
Composer
Se você nunca utilizou o Composer, recomendo que você primeiro leia a documentação oficial para saber como ele funciona. Mas de forma muito resumida eu posso dizer: você configura as dependências do seu projeto em um arquivo composer.json e o script do Composer irá se encarregar de instalar tudo o que for necessário.
Para começar, é necessário instalar o Composer. E isso pode ser tão simples quanto uma ou duas linhas de comandos, você escolhe:
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer # COMANDO OPCIONAL
Se você executar o segundo comando, que é opcional, o comando do composer ficará acessível de qualquer lugar do sistema (o que pode ou não ser uma boa ideia, você quem sabe). Para esse post, eu vou utilizar o Composer instalado globalmente (executando o segundo comando).
composer.json
Para começar, precisamos criar um arquivo composer.json. O composer possui um comando interativo, que vai “montando” o arquivo conforme respostas inseridas no terminal (informações digitadas em cor azul):
$ composer initWelcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (/) [root/composer-test]: ew/composer-test
Description []: Just a test app
Author []: Eduardo Weiland <my@ema.il>
Minimum Stability []: stable
License []: none
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
IMPORTANTE: quando o Composer perguntar se você quer definir as dependências interativamente, digite no, pois o CakePHP precisa de algumas configurações adicionais para funcionar. No final do assistente, confirme a geração do código do composer.json e em seguida abra o arquivo para edição (qualquer editor de texto simples serve, mas eu recomendo o vim 😉 ).
O arquivo, por enquanto, deve parecer com o seguinte:
{ "name": "ew/composer-test", "description": "Just a test app", "license": "none", "authors": [ { "name": "Eduardo Weiland", "email": "my@ema.il" } ], "minimum-stability": "stable", "require": { } }
Bastante incompleto, não é? Então vamos melhorá-lo um pouco. Comece adicionando a configuração do repositório do CakePHP, conforme as instruções na página oficial. Até a versão atual (2.4.5), para isso era necessário apenas acrescentar as seguintes linhas no arquivo:
"repositories": [ { "type": "pear", "url": "http://pear.cakephp.org" } ]
Feito isso, basta adicionar a dependência do CakePHP dentro do objeto “require”, como é feito a seguir:
"require": { "pear-cakephp/cakephp": ">=2.4.0" }
Outra coisa a ser feita, que não é essencial mas mantém o padrão utilizado pelo CakePHP, é definir o nome do diretório de instalação dos pacotes pelo Composer. E para isso, é só adicionar mais algumas linhas no arquivo:
"config": { "vendor-dir": "Vendor" }
No final, o arquivo deve estar semelhante ao seguinte:
{ "name": "ew/composer-test", "description": "Just a test app", "license": "none", "authors": [ { "name": "Eduardo Weiland", "email": "my@ema.il" } ], "minimum-stability": "stable", "require": { "pear-cakephp/cakephp": ">=2.4.0" }, "repositories": [ { "type": "pear", "url": "http://pear.cakephp.org" } ], "config": { "vendor-dir": "Vendor" }
composer install
Tento o arquivo composer.json completo, basta agora deixar o composer fazer a mágica dele:
$ composer install
Esse comando irá baixar e “instalar” o CakePHP para a pasta “Vendor” configurada. Um novo arquivo, composer.lock será gerado informando quais versões dos pacotes foram instaladas. Quando outros desenvolvedores rodarem o comando composer install, serão instaladas as mesmas versões (até que seja executa um composer update). Por isso os arquivos composer.json e composer.lock devem ser adicionados ao controle de versão utilizado (e o conteúdo do diretório Vendor – ou o próprio diretório – deve ser ignorado, pois o conteúdo pode ser facilmente replicado.)
Criando o projeto
Bom, agora que temos o framework do CakePHP instalado, falta o esqueleto que foi visto no último post. Agora quem vai ajudar nessa tarefa é o próprio CakePHP, com o famoso cake bake. Para criar a estrutura inicial do projeto, execute:
$ Vendor/bin/cake bake projectWelcome to CakePHP v2.4.5 Console
—————————————————————
App : composer-test
Path: /home/eduardo/composer-test/
—————————————————————
What is the path to the project you want to bake?
[/home/eduardo/composer-test/myapp] > /home/eduardo/composer-test
Skel Directory: /home/eduardo/composer-test/Vendor/pear-pear.cakephp.org/CakePHP/Cake/Console/Templates/skel
Will be copied to: /home/eduardo/composer-test
—————————————————————
Look okay? (y/n/q)
[y] > y
Por algum motivo que eu não sei exatamente qual, todos os arquivos gerados pelo CakePHP possuem permissão de execução (!!!!!). Para resolver isso, use o comando
$ find . -path ./Vendor -prune -o ! -type d -executable -execdir chmod -x {} +
Esse comando irá encontrar (find) a partir do diretório atual (.), ignorando (-prune) a pasta (-path) ./Vendor, todos os arquivos que não sejam diretórios (! -type d) e que sejam executáveis (-executable) e para cada um deles irá executar (-execdir) o comando “chmod -x <arquivo>”.
Configurações
Antes de poder utilizar o CakePHP como foi instalado, precisamos fazer ainda umas pequenas configurações.
Primeiramente, precisamos definir qual é o diretório onde o CakePHP está instalado. Isso é feito editando os arquivos webroot/index.php e webroot/test.php. Nesses dois arquivos, encontre a linha em que o valor da constante CAKE_CORE_INCLUDE_PATH é definida e altere para
define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . APP_DIR . DS . 'Vendor' . DS . 'pear-pear.cakephp.org' . DS . 'CakePHP');
A última alteração necessária é no arquivo Config/bootstrap.php. Nesse arquivo, é necessário configurar o autoload do Composer para funcionar com o CakePHP, assim você poderá instalar qualquer outra biblioteca com o Composer que ela estará disponível para uso. Para isso só é preciso adicionar as seguintes linhas de código no final do arquivo:
// Carrega o loader co Composer require APP . '/Vendor/autoload.php'; // Essas linhas removem o autoloader do CakePHP e o adicionam de // volta como o primeiro autoloader a ser utilizado. Isso evita // conflitos entre as classes definidas na sua aplicação e // definidas em outras bibliotecas. spl_autoload_unregister(array('App', 'load')); spl_autoload_register(array('App', 'load'), true, true);
Console Cake
Para utilizar o console do CakePHP com a instalação pelo Composer, basta utilizar o comando do console da própria aplicação (ele vai ler as configurações e saber onde encontrar o console do Cake). Para executá-lo, o comando é Console/cake. Mas se você acha que digitar esse comando é muito trabalhoso, existem algumas formas de melhorar isso:
Link simbólico
Crie um link na raiz do projeto para executar esse comando:
$ ln -s Console/cake cake
Assim, o comando para executar será ./cake
Alias
Defina um alias (apelido) para o comando:
$ alias cake=Console/cake
Função (minha preferida)
Crie uma função para verificar e executar o comando. A vantagem é que a função pode realizar uma análise maior e permitir inclusive executar o comando de qualquer diretório de dentro do aplicativo. A função que eu particularmente utilizo é a seguinte (você pode adicionar essa função no seu arquivo .bashrc):
function cake() { local PWD="$(pwd)" while test "$PWD" != "/"; do if [ -x "$PWD"/Console/cake ]; then "$PWD"/Console/cake -app "$PWD" $@ return $? fi; PWD=$(dirname "$PWD") done; echo echo " == ERRO: Projeto CakePHP não foi encontrado! ==" echo echo " Esse comando deve ser executado dentro da árvore " echo " de diretórios de um projeto do CakePHP." echo return 1 }
- Garanta que o arquivo Console/cake seja executável! (chmod +x Console/cake)
Conclusão
Agora que você já tem o CakePHP instalado e funcionando com o Composer, você pode aproveitar para adicionar alguns plugins, como o DebugKit. Utilizando o Composer você consegue instalar muitas outras bibliotecas para usar no seu projeto, pois atualmente qualquer biblioteca em PHP decente deveria suportar o Composer.
Até a próxima!
Tuto muito bem explicado!! Funcionou muito bem aqui, mesmo usando RWindows.