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
PHP实现的功能是显示8条基色色带
Oct 09 PHP
PHP新手上路(六)
Oct 09 PHP
有关PHP性能优化的介绍
Jun 20 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
PHP高手需要要掌握的知识点
Aug 21 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
Oct 20 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 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
多文件上传的例子
2006/10/09 PHP
php常用的url处理函数总结
2014/11/19 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
PHP7创建销毁session的实例方法
2020/02/03 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
图片完美缩放
2006/09/07 Javascript
js 方法实现返回多个数据的代码
2009/04/30 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
numpy返回array中元素的index方法
2018/06/27 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
python障碍式期权定价公式
2019/07/19 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
班主任个人工作反思
2014/04/28 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
Mysql Show Profile
2021/04/05 MySQL