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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
劣质的PHP代码简化
Feb 08 PHP
PHP学习之正则表达式
Apr 17 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
PHP输出日历表代码实例
Mar 27 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
Mar 05 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 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
介绍几个array库的新函数 php
2006/12/29 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
laravel学习教程之关联模型
2016/07/30 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
js中的闭包实例展示
2018/11/01 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
详解package.json版本号规则
2019/08/01 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
一个简单的python程序实例(通讯录)
2013/11/29 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python实现flappy bird游戏
2018/12/24 Python
Django组件cookie与session的具体使用
2019/06/05 Python
Python将字典转换为XML的方法
2020/08/01 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
管理部部长岗位职责
2013/12/05 职场文书
高中生班主任评语
2014/04/25 职场文书
新教师岗前培训方案
2014/06/05 职场文书
幼师求职信
2014/06/23 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
作文评语集锦
2014/12/25 职场文书
中小企业员工手册范本
2015/05/14 职场文书