Yii 2.0如何使用页面缓存方法示例

发布时间 - 2026-01-11 01:14:50    点击率:

前言

本文主要给大家介绍的是关于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'),
],

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# yii2  # 页面缓存  # yii  # 缓存的使用  # Yii2 assets清除缓存的方法  # 深入解析PHP的Yii框架中的缓存功能  # Yii清理缓存的方法  # Yii配置与使用memcached缓存的方法  # yii2缓存Caching基本用法示例  # YII Framework框架教程之缓存用法详解  # 简介PHP的Yii框架中缓存的一些高级用法  # PHP Yii清理缓存的实现方法  # Yii数据库缓存实例分析  # Yii开启片段缓存的方法  # YII框架http缓存操作示例  # Yii框架常见缓存应用实例小结  # 重写  # 的是  # 相关内容  # 给大家  # 这篇文章  # 谢谢大家  # 如何使用  # 进行了  # 参数设置  # 有疑问  # web  # Response  # Instance  # Cache  # caching  # di  # gt  # varByParam  # extends 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网站优化排名时,需要考虑哪些问题呢?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  高端云建站费用究竟需要多少预算?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  如何快速搭建高效简练网站?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel用户密码怎么加密_Laravel Hash门面使用教程  昵图网官网入口 昵图网素材平台官方入口  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何用好域名打造高点击率的自主建站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  手机软键盘弹出时影响布局的解决方法  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  ,南京靠谱的征婚网站?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  *服务器网站为何频现安全漏洞?  jQuery中的100个技巧汇总  浅谈redis在项目中的应用  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  javascript中的try catch异常捕获机制用法分析  JavaScript实现Fly Bird小游戏  利用vue写todolist单页应用  如何快速搭建虚拟主机网站?新手必看指南  如何快速生成ASP一键建站模板并优化安全性?  网易LOFTER官网链接 老福特网页版登录地址  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel如何处理文件下载请求?(Response示例)  如何快速查询域名建站关键信息?  如何在阿里云ECS服务器部署织梦CMS网站?  Android使用GridView实现日历的简单功能  打造顶配客厅影院,这份100寸电视推荐名单请查收  iOS正则表达式验证手机号、邮箱、身份证号等  如何在腾讯云服务器上快速搭建个人网站?  JavaScript常见的五种数组去重的方式  微信小程序 canvas开发实例及注意事项  HTML 中动态设置元素 name 属性的正确语法详解  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel如何使用模型观察者?(Observer代码示例)  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何记录自定义日志?(Log频道配置)  Firefox Developer Edition开发者版本入口  如何确保西部建站助手FTP传输的安全性?  Android实现代码画虚线边框背景效果