Uma funcionalidade legal do CakePHP é a possibilidade de adicionar novos PATHS (caminho de diretórios) que contenham código fonte, com isso por exemplo é possível criar um diretório onde podemos fazer compartilhamento de plugins com diversos projetos.

Todos esses Paths você pode definir no bootstrap de sua aplicação esse se encontra em: config/bootstrap.php

1
2
3
4
5
6
7
8
9
	$controllerPaths = array();
	$viewPaths = array();
	$modelPaths = array();
	$helperPaths = array();
	$componentPaths = array();
	$pluginPaths = array();
	$vendorPaths = array();
	$localePaths = array();
	$shellPaths = array();

Pode ser passados vários PATHS no array, e todos serão adicionados junto com os PATHS padrões do CakePHP 1.2.

Além da funcionalidade de compartilhar código, pode se fazer algumas especializações com esse tipo de funcionalidade, com criatividade e lógica é possível criar controllers com mesmo nome e dependendo da situação um dos dois serem chamados, assim como fazer overwrite das classes de modelo, etc…


Foi lançada duas novas versões do CakePHP, um novo released da versão 1.2 (CakePHP 1.2) e uma versão de desenvolvimento do Cake 3.

Curiosidade da versão do Cake 3 é a mudança de nome que provavelmente foi dada por causa da licensa do “PHP”.

  3. The name "PHP" must not be used to endorse or promote products
     derived from this software without prior written permission. For
     written permission, please contact group@php.net.

Veja toda a Licensa do PHP aqui.

Ou seja só pode usar o nome PHP em algum produto com autorização do PHP, não sei se as outras versões possuem essa autorização mas todavia, acho que o Cake está encaminhando a mudar o nome.

O released CakePHP 1.2.4.8284, é de bug fixes, com pequenas mudanças, e alguns bugs fixed, assim como melhorias nos tests. Todas as mudanças na versão do CakePHP 1.2 pode ser visto no changelog.

Enquanto a versão Cake 3, está sendo desenvolvida utilizando os recursos do PHP 5.3, como funções anonimas e namespace, que irão ajudar muito principalmente no desenvolvimento de plugins que será muito mais fácil, pois será agora possível a criação de pacotes. Assim como o conflito com o nome de classes que não irão correr mais, e isso é um grande ponto.

A versão Cake3 será totalmente reformulada e vale a pena acompanhar o repositório o que está por vir.

Em paralelo está sendo desenvolvido o CakePHP 2, que será um refactoring do código do CakePHP 1.2 para PHP 5 para rodar em strict com o PHP 5.

Seguido várias pessoas tem problemas com encode no desenvolvimento com CakePHP 1.2, são pequenos erros que levam a fazer isso, para solucionar os mesmos normalmente é simples, porém vou buscar descrever aqui onde a maioria pode ocorrer:

Database Config

No config/database.php, onde definimos a conexão a base de dados do CakePHP, é possível definir nomes de atributos que serão os nomes do tipo de conexão a base de dados.

Exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< ?php
class DATABASE_CONFIG {
 
	var $default = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'root',
		'password' => 'root',
		'database' => 'abccc',
		'encoding' => 'utf8',
	);
}
?>

O importante aqui é definir o hash enconding no array do attributo da sua configuração de banco, no caso foi definido utf8 (sem o hífen).

Aplicação Charset

No arquivo config/core.php, existe a configuração de encoding a ser definida para aplicação:

1
2
3
4
/**
 * Application wide charset encoding
 */
	Configure::write('App.encoding', 'UTF-8');

Sete nela o mesmo encode que você está usando ao longo da aplicação.

Charset do HTML

Outro local que definimos o encode da aplicação agora no caso o encode do HTML, é no helper Html, no layout verificar o:

1
< ?php echo $html->charset(); ?>

Por padrão o arquivo views/layouts/default.ctp já contei a impressão do meta charset, e não é necessário passar parâmetro para o mesmo, visto que já foi definido no config/core.php o encoding default da aplicação, logo o HtmlHelper pega o que foi definido no config/core.php.

Se o seu arquivo de layout não contem a sua adição pode ser necessária.

Database

Por último se continuar ainda com problemas de encoding, é necessário verificar seu banco de dados criado, verifique se o mesmo está setado com o encode esperado, assim como as tabelas e os atributos do tipo string estão também usando o mesmo encode.

Files

Outra verificação a ser feita é o encode dos arquivos, vale lembrar que os arquivos PHP devem estar no mesmo encode do resto da aplicação, para verificar isso no linux você pode usar o comando file: file arquivo.php, ele irá enformar o encode do arquivo, caso esteja errado converta o arquivo para o encode correto.

Esses processos são triviais ao longo do desenvolvimento com o CakePHP, e para aqueles que estão com algum problema provavelmente, algum desses processos descritos devem estar levando a sua aplicação CakePHP a apresentar esse tipo de error.

Resolvi criar um simples script para facilitar a configuração de projetos PHP, a cada vez que eu ia começar 1, era necessário eu criar um novo virtual host, adicionar no hosts o alias do ip, restartar apache, etc…

Então fiz um script simples, realmente simples em PHP para executar por linha de comando PHP-CLI, vou deixar a disposição para alguém que queria:

create-project.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
< ?php
 
	/*
	 * Template of virtual host
	 */
	$template = "<VirtualHost *:80>\n";
	$template .= "ServerName {$argv[1]}\n";
	$template .= "DocumentRoot {$argv[2]}\n";
	$template .= "<directory {$argv[2]}>\n";
	$template .= "	Options Indexes FollowSymLinks MultiViews\n";
	$template .= "	AllowOverride All\n";
	$tempalte .= "	Order allow,deny\n";
	$template .= "	allow from all\n";
	$template .= "</directory>\n";
    	$template .= "ErrorLog /var/log/apache2/{$argv[1]}_error.log\n";
	$template .= "   LogLevel warn\n";
	$template .= "    CustomLog /var/log/apache2/{$argv[1]}_access.log combined\n";
	$template .= "";        
	$template .= "\n";
 
	echo $template;
 
	$file = fopen("/etc/apache2/sites-available/{$argv[1]}", 'x');
	fwrite($file, $template);
	fclose($file);
 
	exec("ln -s /etc/apache2/sites-available/{$argv[1]} /etc/apache2/sites-enabled/{$argv[1]}");
 
	$file = fopen("/etc/hosts", 'a+');
	fwrite($file, "127.0.0.1 {$argv[1]}\n");
	fclose($file);
 
	exec('/etc/init.d/apache2 restart');
 
	echo 'Created with success the config for: ', $argv[1]; 
?>

Para usar basta executar como root:

sudo php create-project.php nome_projeto /var/diretorio/

E pronto, ele criara o vhost, insere no hosts o alias, aponta o vhost para o diretório indicado e restarta o apache.

Ele funciona no Ubuntu linux, não testei em outras distros, e provavelmente possa não funcionar.

BuscaPé, líder em comparação de preços na América Latina