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 smarty模版引擎中的缓存应用
Dec 02 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
php实现用户在线时间统计详解
Oct 08 PHP
hadoop中一些常用的命令介绍
Jun 19 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
php中chdir()函数用法实例
Nov 13 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php+mysql实现无限分类实例详解
Jan 15 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
php发送http请求的常用方法分析
Nov 08 PHP
搜索附近的人PHP实现代码
Feb 11 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
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
python实现打砖块游戏
2020/02/25 Python
利用python汇总统计多张Excel
2020/09/22 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
HR喜欢的自荐信格式
2013/10/08 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
经典安踏广告词
2014/03/21 职场文书
班主任新年寄语
2014/04/04 职场文书
营销经理工作检讨书
2014/11/03 职场文书
公务员政审个人总结
2015/02/12 职场文书
教师节晚会主持词
2015/06/30 职场文书
主婚人致辞精选
2015/07/28 职场文书
高二化学教学反思
2016/02/22 职场文书
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL