Yii 2.0如何使用页面缓存方法示例
前言
本文主要给大家介绍的是关于Yii2.0如何使用页面缓存的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍。
起初使用页面缓存,发现使用于含有参数的方法存在弊端,只能缓存第一次的页面,导致后面所有不同参数的页面均显示第一次缓存页面;没有生成一个参数页面一个缓存;于是,进行了重写页面缓存。
示例代码
Yii::$app->request->get('id')
*@varstring
*/
public$varByParam='';
publicfunctionbeforeAction($action)
{
if(!$this->enabled){
returntrue;
}
$this->cache=Instance::ensure($this->cache,Cache::className());
if(is_array($this->dependency)){
$this->dependency=Yii::createObject($this->dependency);
}
$properties=[];
foreach(['cache','duration','dependency','variations']as$name){
$properties[$name]=$this->$name;
}
$id=$this->varyByRoute?$action->getUniqueId().$this->varByParam:__CLASS__;
$response=Yii::$app->getResponse();
ob_start();
ob_implicit_flush(false);
if($this->view->beginCache($id,$properties)){
$response->on(Response::EVENT_AFTER_SEND,[$this,'cacheResponse']);
returntrue;
}else{
$data=$this->cache->get($this->calculateCacheKey());
if(is_array($data)){
$this->restoreResponse($response,$data);
}
$response->content=ob_get_clean();
returnfalse;
}
}
}
?>
使用:
[
'class'=>'common\lib\PageCache',
'only'=>['view'],
'duration'=>0,//永不过期
'varByParam'=>Yii::$app->request->get('id'),
],
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。