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.

Composer + CakePHP

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:

Terminal
$ 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):

Terminal
$ composer init


Welcome 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
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:

Terminal
$ 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:

Terminal
$ Vendor/bin/cake bake project

Welcome 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:

Terminal
$ ln -s Console/cake cake

Assim, o comando para executar será ./cake

Alias

Defina um alias (apelido) para o comando:

Terminal
$ 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!

Com as tags → 

One Response to CakePHP com Composer

  1. cezarcruz disse:

    Tuto muito bem explicado!! Funcionou muito bem aqui, mesmo usando RWindows.

Plataforma Wordpress Latest (GPLv2)
Tema PageLines Lite Improved (GPLv3)
Hospedado por OpenShift by RedHat
Domínio registrado pela Neep Host
Creative Commons Attribution-ShareAlike License
Copyleft © 2016 Eduardo Weiland
Utilize um leitor de QR Code para acessar o blog no seu celular:
21
%d blogueiros gostam disto: