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 mcrypt可逆加密算法分析
Jul 19 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
Smarty分页实现方法完整实例
May 11 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
php smtp实现发送邮件功能
Jun 22 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
PHP字符串中抽取子串操作实例分析
Jun 22 PHP
PHP7 安装event扩展的实现方法
Oct 08 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生成与读取excel文件
2016/10/14 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
Jquery获取复选框被选中值的简单方法
2013/07/04 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
JS作用域深度解析
2016/12/29 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
2019/02/10 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python如何生成各种随机分布图
2018/08/27 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
员工评语范文
2014/12/31 职场文书
大学生求职自荐信
2015/03/24 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP