CakePHP: Arquivos de cache únicos para um element

23 05 2009

Ao incluir o mesmo element com cache mais de uma vez na mesma página, caso você coloque o array $params com as chaves  na mesma ordem, mesmo que com diferentes valores , o  CakePHP irá sobrescrever o arquivo do cache, pois estas chaves são utilizadas para definir o nome do arquivo de cache. Veja a seguir:

echo $this->element('page',array('id' => 1, 'cache'=>'+1 hour'));
echo $this->element('page',array('id' => 2, 'cache'=>'+1 hour'));

Note que mesmo o valor do parametro id sendo diferente para cada chamada, o nome de arquivo gerado será o mesmo para os dois elements, algo como:

/app/tmp/cache/views/element_id_cache_<plugin><element>

A solução para o problema é definir a chave cache do array $params como um array, em vez de simplesmente definir a expiração do cache, definindo as chaves time e key, da seguinte maneira:

echo $this->element('page',array(
                             'id' => 1,
                             'cache'=> array(
                                'time' => '+1 hour',
                                'key' => 'nomeUnico1'
                             )));

echo $this->element('page',array(
                             'id' => 2,
                             'cache'=> array(
                                'time' => '+1 hour',
                                'key' => 'nomeUnico2'
                           )));

Definindo $params['cache']‘['key'] com um nome único, você terá nomes de arquivos de cache únicos:

/app/tmp/cache/views/element_nomeUnico1_<plugin><element>
/app/tmp/cache/views/element_nomeUnico2_<plugin><element>

Isto também poder ser útil quando é necessário gerar cache por usuário ou algo semelhante.

Mais informações em: http://book.cakephp.org/view/561/Caching-Elements e http://api.cakephp.org/view_source/view/#line-298


Ações

Informação

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s




Seguir

Obtenha todo post novo entregue na sua caixa de entrada.