Archive for the frameworks Category

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.

CakePHP Model sem Tabela

| julho 21st, 2009

Algumas vezes precisamos de modelos sem tabela do banco de dados, e para fazer isso no CakePHP, temos um attributo que definimos o uso ou não de tabelas no modelo:

1
2
3
4
5
6
7
< ?php
class User extends AppModel {
 
	public $useTable = false;
 
}
?>

Ocorreu nesse mês em Berlin o CakeFest3, para as pessoas como eu, que não puderam se fazer presente no evento, vale a pena da uma olhada no material das apresentações que rolaram por lá.

Para visualizar o material e fazer o download, acesse esse link.

No CakePHP 1.2, ficou mais fácil retornarmos do nossos modelos apenas aquilo o que realmente esperamos, no core do CakePHP 1.2, foi adicionado o behavior Containable, o qual se propõem, a filtrar o relacionamentos entre os modelos no CakePHP.

Com este, conseguimos quando fazemos retrive em algum modelo, fazer com que ele traga justamente aquilo que achamos pertinente, ou seja, apenas o resultado desejado, com isso poupando dados redundantes, assim como melhorando a performance por o modelo deixar, de trazer relacionamentos que não são necessários.

O uso do mesmo no CakePHP, é muito simples, basta chamar ele no modelo, que julga pertinente, ou adicionar no AppModel para que todos os modelos herdem esse behavior, Countaible.

1
2
3
class AppModel extends Model {
    public $actsAs = array('Containable');
}

ou on the fly:

1
$this->Modelo->Behaviors->attach('Containable');

Após a importação seu uso é simples, imaginamos um ambiente onde temos os seguintes modelos:

Post, User, Comment, Tag, onde:

1
2
3
Post belongsTo User
Post hasMany Comment
Post hasAndBelongsToMany Tag

Agora supúnhamos que desejamos fazer uma listagem dos últimos posts, logo só precisamos exibir os dados, do Post, o User que escreveu esse Post e as Tags desse post.

1
2
$this->Post->contain('User','Tag');
debug($this->Post->find('all', array('limit' => 10)));

outro exemplo:

1
     $this->Post->contain('Comment.author = "Gabriela"');

Com isso filtramos os resultados que o find do Post deve trazer, isso pode ser feito com diversos relacionamentos:

1
2
$this->User->contain('Profile', 'Scrap', 'Scrap.User', 'Album.Photo');
$this->User->find('all');

Conseguimos definir os relacionamentos entre os modelos que desejamos trazer, é uma boa alternativa para o:

1
$this->Modelo->recursive

Resumindo o Containable é sempre uma grande opção, na ora de usar o find, pois com eles conseguimos definir exatamente o que desejamos que o find traga para nós.

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