cakephp1.2流のエレメントキャッシュ
サイドメニューなど、エレメントの部分だけキャッシュしたかったので、
マニュアルの3.9.3.2 エレメントをキャッシュするを見て、実装したのですが、
コントローラ側からCache::read();としても反応なし。
・・・?と思いながらview.phpを眺めていると、以下の記述が。。。
-
if ($expires) {
-
$cacheFile = 'element_' . $key . '_' . $plugin . Inflector::slug($name);
-
$cache = cache('views' . DS . $cacheFile, null, $expires);
-
return $cache;
-
}
-
}
あれ、cache();って1.1のやつだから非推奨のはずじゃぁ。。。
ってことで、cakephp1.2流のelementキャッシュを考えてみた。
●view側
-
<?php
-
?>;
の代わりに以下を挿入
-
<?php
-
if(($element = Cache::read('left_menu', 'element')) === false){
-
$element = $this->element('left_menu');
-
Cache::write('left_menu', $element, 'element');
-
}
-
echo $element;
-
?>
●コントローラ側
beforeFilterなどでエレメントキャッシュを定義し、
キャッシュが存在しない場合に限り、クエリを発行する。
-
'engine' => 'File',
-
'duration'=> '+5 min',
-
'path' => CACHE . 'views' . DS,
-
'prefix' => 'element_'
-
);
-
Cache::config('element', $config);</code>
-
-
if( Cache::read('left_menu', 'element') === false ){
-
$areas = $this->Area->find('menu'));
-
$categories = $this->Category->find('menu'));
-
}
これで劇早&1.2流のキャッシュができましたー!






