3.3.3 Instalação avançada
Aqui estão algumas situações que você escolhe o lugar onde os diretórios do CakePHP vão ficar no seu sistema. Isto pode ser por causa de uma restrição do sistema ou para compartilhar as bibliotecas entre diferentes aplicações. Esta seção descreve como espalhar seus diretórios dos CakePHP no sistema.
Primeiro, note que há três partes principais da sua aplicação CakePHP:
- As bibliotecas do núcleo do CakePHP, em /cake;
- O código da sua aplicação, em /app;
- Os arquivos públicos da sua aplicação, normalmente em /app/webroot.
Cada um desses diretórios pode ser colocado em qualquer lugar do seu sistema, com exceção do webroot, que precisa estar acessivel pelo servidor web. Você pode mover a pasta webroot para fora do diretório da sua aplicação (app), desde que informe ao Cake onde você vai colocá-la.
Para configurar sua instalação do Cake, nós vamos ter que fazer algumas alterações no arquivo /app/webroot/index.php. Aqui existem três constantes que precisaremos editar: ROOT, APP_DIR e CAKE_CORE_INCLUDE_PATH.
- ROOT deve ser configurada para informar o diretório onde sua aplicação se encontra, ou seja, onde está a pasta app;
- APP_DIR deve ser configurada para informar qual a pasta app;
- CAKE_CORE_INCLUDE_PATH deve ser configurada para informar o diretório onde estão as bibliotecas do CakePHP (a pasta cake).
Vamos fazer um exemplo para que você veja como funciona a instalação avançada na prática. Imagine que eu quero que a aplicação funcione como segue:
- As bibliotecas do CakePHP deverão ser colocadas em /usr/lib/cake;
- O diretório público da minha aplicação (webroot) deve ser em /var/www/meusite;
- O diretório da aplicação deve ser /home/eu/meusite.
Com estas configurações, eu preciso editar o meu arquivo webroot/index.php (que no final deve estar em /var/www/meusite/index.php, neste exemplo) e ver o seguinte:
// /app/webroot/index.php (parcialmente, comentários removidos)
if (!defined('ROOT')) {
define('ROOT', DS.'home'.DS.'eu');
}
if (!defined('APP_DIR')) {
define ('APP_DIR', 'meusite');
}
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');
}
// /app/webroot/index.php (parcialmente, comentários removidos)if (!defined('ROOT')) {define('ROOT', DS.'home'.DS.'eu');}if (!defined('APP_DIR')) {define ('APP_DIR', 'meusite');}if (!defined('CAKE_CORE_INCLUDE_PATH')) {define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');}
É recomendado que você use a constante DS no lugar das barras para entre os diretórios. Isso previne que não cause erro quando se use a aplicação em sistemas operacionais diferentes, tornando seu código mais portável.
3.3.3.1 Caminhos adicionais para classes
Em algumas ocasiões é interessante você compartilhar as classes do MVC entre as aplicações no mesmo sistema. Se você quer um mesmo controlador para mesma aplicação, você pode usar o arquivo bootstrap.php do CakePHP para adicionar estas classes adicionais.
No bootstrap.php, defina algumas variáveis com nomes especiais para fazer com que o CakePHP olhe nestes diretórios a procura da sua classe:
$viewPaths = array(); $controllerPaths = array(); $modelPaths = array(); $helperPaths = array(); $componentPaths = array(); $behaviorPaths = array();
$viewPaths = array();$controllerPaths = array();$modelPaths = array();$helperPaths = array();$componentPaths = array();$behaviorPaths = array();
Cada um dessas variáveis especiais pode ser um conjunto na array com o diretório absoluto onde estão as classes que você desejar. Tenha certeza que cada diretório especificado inclua as barras com DS.
