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 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
smarty 原来也不过如此~~呵呵
Nov 25 PHP
php smarty的预保留变量总结
Dec 04 PHP
php+javascript的日历控件
Nov 19 PHP
php中去除所有js,html,css代码
Oct 12 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
php实现的二分查找算法示例
Jun 20 PHP
Laravel框架实现的使用smtp发送邮件功能示例
Mar 12 PHP
thinkphp5+layui实现的分页样式示例
Oct 08 PHP
laravel框架与其他框架的详细对比
Oct 23 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 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 获取完整url地址
2008/12/20 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
PHP中常用的魔术方法
2017/04/28 PHP
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
2017/07/24 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python实现的Excel文件读写类
2015/07/30 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
Python Gitlab Api 使用方法
2019/08/28 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python中upper是做什么用的
2020/07/20 Python
python使用列表的最佳方案
2020/08/12 Python
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
2014年两会学习心得体会
2014/03/17 职场文书
小学生环保倡议书
2014/05/15 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
四则混合运算教学反思
2016/02/23 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js