2012-05-17 15:34:35  浏览:1844

cakephp

首先,我们按照官网上的说明,缓存一般文件

开启缓存开关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内容

=================================================================


返回首页