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 XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
PHP的5个安全措施小结
Jul 17 PHP
php中将汉字转换成拼音的函数代码
Sep 08 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
PHP进阶学习之垃圾回收机制详解
Jun 18 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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
Cannot modify header information错误解决方法
2008/10/08 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
举例讲解Python中is和id的用法
2015/04/03 Python
在Python中使用元类的教程
2015/04/28 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
Pandas的Apply函数具体使用
2020/07/21 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
国外软件测试工程师面试题
2016/12/09 面试题
《晚上的太阳》教学反思
2014/04/23 职场文书
伦敦奥运会口号
2014/06/13 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB