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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
html中select语句读取mysql表中内容
Oct 09 PHP
PHP 数组遍历顺序理解
Sep 09 PHP
php中去除所有js,html,css代码
Oct 12 PHP
php printf输出格式使用说明
Dec 05 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php的socket编程详解
Nov 20 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 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桌面中心(二) 数据库写入
2007/03/11 PHP
php解析json数据实例
2014/08/19 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
Python读取mp3中ID3信息的方法
2015/03/05 Python
Python多线程编程(六):可重入锁RLock
2015/04/05 Python
python区块及区块链的开发详解
2019/07/03 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
心得体会范文
2014/01/04 职场文书
学习十八大报告感言
2014/02/04 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
给老婆的道歉信
2015/01/20 职场文书
行政文员岗位职责
2015/02/04 职场文书
碧霞祠导游词
2015/02/09 职场文书
车间质检员岗位职责
2015/04/08 职场文书
Python内置数据类型中的集合详解
2022/03/18 Python