CakePHP的MVC三部分都有一些和Cache相关的设置:
如Model里的cacheQueries属性,如果此属性被设置为true,那么假设我们在一次请求里,重复执行某条SELECT SQL,那么在第一次查询的时候其结果会被缓存(保存到一个数组里),以后重复的查询将会直接得到结果。
Controller里的cacheAction必须满足三个条件才能生效:
1. 在配置文件core.php里设置:Configure::write(‘Cache.check’, true);
2. 在控制器中加载Cache助手:var $helpers = array(‘Cache’); (可以统一放在app_controller.php里)
3. 在控制器中设定$cacheAction属性,如:var $cacheAction = true; 或者 var $cacheAction = "1 hour";
注意:设定$cacheAction的时候,可以使用数组的方式,如:
var $cacheAction = array(
‘view/1′ => 123456,
‘view/2′ => ’1 year’
);
Controller里的persistModel属性比较有趣,如果设置为true,那么在此Controller里用到的Model会被序列化后缓存,据说从一个序列化后的缓存文件里加载数据,然后反序列化后得到说要的对象,比直接用new实例化有效率。
View的模板里可以使用<cake:nocache></cake:nocache>把不需要缓存的部分隔出来。不过并不是所有的变量都可以放在<cake:nocache></cake:nocache>之间,你只要看看实际生成的缓存文件就应该明白,视图缓存文件的原理是生成一个渲染后的php文件,并且缓存文件里面附带有controller的基本信息,在缓存有效的时间内,同样的请求会跳过action的执行,直接使用视图缓存。所以如果你在action里set出来的视图变量就不可能放在cake:nocache里,action并不执行,这样的变量不会生效,如果你一定要实现类似的功能,可以尝试使用requestAction方法。
另外,Model里在执行save和del方法的时候,会通过钩子方法更新缓存文件。
参考链接
==================
View里的renderElement方法已经不推荐使用了,取而代之的是使用element方法,现在似乎流行直接用名词做方法名,似乎说法是这样更DSL,不过我现在还不太习惯这样的方式。
==================
尽量避免在controller中使用requestAction,而应该尽可能的结合view中的element使用requestAction。
Entries tagged with “cakephp”.
周四 2 六 2011
CakePHP中Cache相关的设置
Posted by Jansfer under CakePHP
No Comments
周一 28 三 2011
CLIENT_ERROR bad command line format
Posted by Jansfer under 技术
No Comments
CakePHP在操作memcache的delete方法时,返回:
MemcachePool::delete() ................ failed with: CLIENT_ERROR bad command line format. Usage: delete 原因是memcache与memcached版本间的一个问题。临时解决方法,修改/cake/libs/cache/memcache.php里的delete方法:
function delete($key) {
改为:
周一 20 十二 2010
Cakephp 执行主要流程
Posted by Jansfer under CakePHP, 技术
No Comments
加载基本文件
cake/basics.php 里面定义了常用的方法以及时间常量
$TIME_START = getMicrotime(); 记录开始执行时间
cake/config/paths.php 里面定义一些基本路径
cake/lib/object.php cake的基本类
cake/lib/inflector.php 这里主要是处理单复数,带下划开命名以及驼峰式命名
cake/lib/configure.php 里面提供文件配置的读写,路径的设置,以及加载文件的方法
cake/lib/cache.php 缓存的操作
Configure::getInstance(); 开始对项目的配置
config/core.php 项目的配置文件
config/bootstrap.php 项目的入口文件
App::import(‘Core', array(‘Dispatcher')); 加载核心,开始做正事了,GO
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url); 开始执行,通过对当前的url解析,如果你设置了压缩Js、Css,则对这些文件压缩输出,如果你对页面设置缓存,则直接输出缓存页面,最后查找相应的Controller。如果找不到,则进行相应的错误处理。
实例化当前Controller,确定视图路径,实例化Component,获得仅当前Controller[不包含父类Controller]的方法
对当前Controller中私有方法、带admin路由或者带prefix的方法进行保护,不允许直接访问
设置当前Controller的基本属性,如base、here、webroot、plugin、params、action、 passedArgs[array_merge($this->params['pass'],$this->params['named'])]
调用Controller中的constructClasses方法
执行__mergeVars方法,该方法对父子类的components、helpers、uses等属性进行特殊合并处理
调用Component->init()方法,载入用户设置的系列components(Session为默认),并默认enabled属性为true。(该属性可以后期在beforeFilter里修改)
调用Component->initialize()方法,若系列components里有这个initialize方法并且该component 的enabled为true,则调用该components->initialize方法(这里enabled用户好像无法通过 Controller设置,只能为true)
调用当前Controller中beforeFilter()方法,这个方法是个好东西^_^
调用Component->startup()方法,同样,若系列components里有这个startup方法并且该component的 enabled为true,则调用该components->startup方法(这里enabled倒是可以通过beforeFilter设 置),该方法也是components里最重要的方法,比如Auth就在这里大作文章^_^
开始执行当前Controller里的Action方法
如果设置autoRender为true,则根据调用当前Controller的render()方法,否则返回或输出Action方法的返回的数据
调用Controller的render()方法时,先调用当前Controller中的beforeRender()方法
加载视图渲染类
调用Component->beforeRender()方法,同样,若系列components里有这个beforeRender方法并且该 component的enabled为true,则调用该components->beforeRender方法(这里enabled可以通过 beforeFilter设置)
获取当前Model的数据验证错误信息,给View使用
调用View的render()方法
载入相关Helper助手
调用Helper的beforeRender()方法
调用Helper的afterRender()方法
相关的缓存处理
执行renderLayout()方法,当然前提你要允许渲染布局,默认为default.ctp布局文件
调用Helper的beforeLayout()方法
调用Helper的afterLayout()方法
调用Component->shutdown()方法,同样,若系列components里有这个shutdown方法并且该component的 enabled为true,则调用该components->shutdown方法(这里enabled可以通过beforeFilter设置)
执行当前Controller里的afterFilter方法,这里你可以对视图的输出内容($controller->output)做一些处理
返回或输出视图数据。
流程完毕。
周二 7 九 2010
5个基于CakePHP的开源CMS
Posted by Jansfer under CakePHP
No Comments
前言:CakePHP is great rapid development php framework. CakePHP allows you to create applications with ease. But in case you CakePHP lover need to create simple sites or applcations, maybe you considering to use one of the CakePHP based CMS than developed yourself from scratch.

Wildflower内容管理系统和应用平台的基础是CakePHP的框架和jQuery的 Javascript库,是标准的开放源代码和用户友好界面。
Features特征
- 评论完全与Akismet垃圾邮件的检查。
- 更多文章和评论模型单元测试。
- 包括最新的CakePHP的- r7117。
- 网页中包含的内容修改和工作预览。
- 增强错误修正。
2、Croogo
Croogo is a CakePHP powered Content Management System.
特征
- 内容类型:您可以创建自己的内容类型
- 博客
- 节点
- 页
- 所见即所得编辑器
- 附件(用于图像和文件上传)
- 评论
- 嵌套评论
- 电子邮件通知
- Moderation 缓和
- 垃圾邮件防护(需要Akismet API密钥)
- captcha(需要Recaptcha API密钥)
- 聚合:RSS资讯
- 个别内容类型
- 所有推广项目
- 搜索引擎优化
- 搜索引擎友好的URL
- 完全控制meta标签
- 自定义字段
- 菜单管理器
- 支持块
- 联系方式
- 邮件归档
- 文件管理器
- 多用户
- ACL的管理(权限)
- 主题
- 基于Web的管理
- MIT许可证

CupCake CMS is an Open Source Content Management System built using CakePHP. 其目的是提供一个简单的网页设计师和易于部署工具来管理内容中小型无需编程即可完成所有的代码.通过简单易用的界面和所见即所得的编辑器(FCKEditor),内容可以创建和更新单行网站,通过授权的用户无需学习HTML的需要。
对于那些对其他开源CMS应用熟悉,CupCake是一种轻便的设计为导向的内容管理系统,这意味着对网站的快速部署。
Lumad CMS是一个开放源码的内容管理平台,为开发者提供了一种快速,简单的接口设计,管理小型网站的意思。 伊塔€™š不是一个社区驱动像Drupal,也不是工作流驱动,企业如Typo3 CMS。
- 发展现状:2 – Pre-Alpha
- 环境: Web Environment
- 目标用户: 开发人员 , 最终用户
- 许可: 麻省理工学院/ X联盟许可证
- 自然语言: 英语
- 操作系统: 操作系统无关
- 编程语言:PHP
- 主题: 动态内容 , 网站管理
5、OvenCMS
OvenCMS是一个开源的CMS,由CakePHP的框架和jQuery JavaScript库建成。OvenCMS完全模块化,有工作插件(模块)很多。
结束语
本文来自:5 CakePHP based Content Managament System 翻译
周一 16 八 2010
在Cakephp中使用i18n本地化程序实际多语言,并使用poedit编辑语言文件
Posted by Jansfer under CakePHP
No Comments
|
Cakephp的很强大的i18n功能就是用来实现本地化和国际化的。他通过使用语言配置文件使得程序能够很好的适应变化进行本地化。通过新建locale/chi/LC_MESSAGES/default.po文件,并指定语言选项为“chi”实现。本文中说的就是如何实现这个本地化过程,当然本文中的poedit并不是必须的,但是他可以使得工作效率更高。 一、关于i18n和L10n 这2个东东其实头一次我看到的时候也是一头雾水,但是经过百度的一通搜索,得出的结论就是,不管是几个n,最终的目的就是实现程序本地化就好了,说白了,就是由很多的语言配置文件,反正我是这么理解的。大家也可以去看看, http://baike.baidu.com/view/372835.htm 这里有很详细的说明。 二、在Cakephp里面,实现本地化的方法 目前为止,有2种配置方法。 2.1 方法一 在config/core.php中使用configure::write来制定语言文件。 Configure::write(’Config.language’,”chi”); 2.2 方法二 官方说明: http://book.cakephp.org/view/162/Localizing-Your-Application 貌似很复杂的说哦。 print print print print 他的主要功用就是使得编辑语言配置文件更加方便和快捷。下面是使用poedit的一些简单的截图和说明。 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/59571/showart_2055127.html |



















