Yii 2.0如何使用页面缓存方法示例


Posted in PHP onMay 23, 2017

前言

本文主要给大家介绍的是关于Yii2.0如何使用页面缓存的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍。

起初使用页面缓存,发现使用于含有参数的方法存在弊端,只能缓存第一次的页面,导致后面所有不同参数的页面均显示第一次缓存页面;没有生成一个参数页面一个缓存;于是,进行了重写页面缓存。

示例代码

<?php 


namespace common\lib;

use Yii;
use yii\caching\Cache;
use yii\di\Instance;
use yii\web\Response;
use yii\filters\PageCache as PCache;


/**
* 重写页面缓存,增加varByParam参数一列
*/
class PageCache extends PCache
{
 /**
 * 参数设置,默认无参数
 * 用法:'varByParam' => Yii::$app->request->get('id')
 * @var string
 */
 public $varByParam = '';

 public function beforeAction($action)
 {
 if (!$this->enabled) {
  return true;
 }

 $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']);
  return true;
 } else {
  $data = $this->cache->get($this->calculateCacheKey());
  if (is_array($data)) {
  $this->restoreResponse($response, $data);
  }
  $response->content = ob_get_clean();
  return false;
 }
 }
}
 ?>

使用:

[
'class' => 'common\lib\PageCache',
  'only' => ['view'],
  'duration' => 0, //永不过期
  'varByParam' => Yii::$app->request->get('id'),
],

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
随机头像PHP版
Oct 09 PHP
用PHP将数据导入到Foxmail
Oct 09 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
php smarty模板引擎的6个小技巧
Apr 24 PHP
linux中cd命令使用详解
Jan 08 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
利用php-cli和任务计划实现刷新token功能的方法
May 03 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
通过代码实例解析PHP session工作原理
Dec 11 PHP
php自动加载代码实例详解
Feb 26 PHP
PHP创建单例后台进程的方法示例
May 23 #PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 #PHP
yii 2.0中表单小部件的使用方法示例
May 23 #PHP
php实现留言板功能(会话控制)
May 23 #PHP
php实现文件预览功能
May 23 #PHP
PHP写的简单数字验证码实例
May 23 #PHP
php实现评论回复删除功能
May 23 #PHP
You might like
用PHP实现小型站点广告管理(修正版)
2006/10/09 PHP
如何删除多级目录
2006/10/09 PHP
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
如何让CI框架支持service层
2014/10/29 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
Python读写docx文件的方法
2018/05/08 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
华三通信H3C面试题
2015/05/15 面试题
结婚典礼证婚词
2014/01/08 职场文书
研究生毕业鉴定
2014/01/29 职场文书
销售人员获奖感言
2014/02/05 职场文书
创业计划书之物流运送
2019/09/17 职场文书
七个Python必备的GUI库
2021/04/27 Python