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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
php中的时间显示
Jan 18 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 PHP
php 常用字符串函数总结
Mar 15 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
php实现的mongodb操作类
May 28 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 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
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
php实现json编码的方法
2015/07/30 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python模拟登陆,用session维持回话的实例
2018/12/27 Python
django基于restframework的CBV封装详解
2019/08/08 Python
Python中SQLite如何使用
2020/05/27 Python
基于python实现模拟数据结构模型
2020/06/12 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
服装设计师求职信
2014/06/04 职场文书
信息管理专业自荐书
2014/06/05 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
社会实践活动报告
2015/02/05 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
学校远程教育工作总结
2015/08/11 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书