首先,我们按照官网上的说明,缓存一般文件
开启缓存开关appConfigcore.php
Configure::write ( 'Cache.check', true );
设置缓存方式appConfigootstrap.php
Cache::config('default', array('engine' => 'File'));//缓存为文件
设置控制器appControllerUserController.php
var $helpers = array ('Cache');
var $cacheAction = array(
'view' => array('callbacks' => true, 'duration' => 21600),
'add' => array('callbacks' => true, 'duration' => 36000),
'index' => array('callbacks' => true, 'duration' => 48000)
);
当我们访问到index,add或者view方法时,系统会自动缓存一个文件到app mpcacheviews,至于文件名,系统会自动解析好
-------------------------------------按照上面的方法,就可以缓存一般的html页面了----------------------------------------
==============================================================
------------------------------------缓存xml,json等------------------------------------------------------------
由于系统默认不缓存xml,所以我们必须手动缓存
在完成上面的基础上,我们修改libCakeViewXmlView.php下的render方法:
在最后一个return $content;前加上下面文字:
//@todo 写缓存文件
$this->getEventManager()->dispatch(new CakeEvent('View.afterLayout', $this, array($viewFileName)));
这样就可以把xml缓存到文件啦。。。。
同理,我们可以修改json视图libCakeViewJsonView.php,同样是render方法,也是在最后一个return $content;前加上下面文字:
//@todo 写缓存文件
$this->getEventManager()->dispatch(new CakeEvent('View.afterLayout', $this, array($viewFileName)));
在这里说明一下,if (isset($this->viewVars['_serialize']))
如果在控制器中存了_serialize这个变量,这里就会取到值啦,例如:
控制器中加入lists方法
public function lists() {
$data = $this->paginate ();
$this->set ( 'users', $data );
$this->set ( '_serialize', array (
' users '
) );
}
进入这个if中,就自动格式化啦,然后直接返回相应的数据。
================》最后加一点
在libCakeRoutingDispatcher.php中的cached方法,if语句里面加入
//@todo xml或者json,设置请求头
$ext=(preg_replace('/.*.(.*[^.].*)*/iU','\1',$path));
if (!empty($ext) && ($ext=="json" || $ext=="xml")){
header("Content-type: application/".$ext);
}
如果不这样设置,第一次请求可以得到正常的xml或者json,但是第二次请求时,系统会按照html解析缓存文件。
========================over=============================
现在系统可以分别缓存html,json,xml啦。。。。
======================另外加一个自定义缓存文件名========================
修改libCakeRoutingDispatcher.php的cached方法
$filename = CACHE . 'views' . DS . $path . '.php';//缓存的文件名称,随便自己怎么修改啦
修改libCakeViewHelperCacheHelper.php的_writeFile方法
$cache = $cache . '.php';//修改$cache内容
=================================================================