发新话题
打印

CakePHP学习告一段落,谈谈一些体会。

CakePHP学习告一段落,谈谈一些体会。

作者:老王

随着公司新项目开发告一段落,我的CakePHP学习也差不多了,期间尝试了CakePHP的基本功能,说说感受,首先,CakePHP的CRUD自动化程度确实节省了很多麻烦,但是,CakePHP生成的很多SQL如果不仔细explain是低效的,因为缺省状态下CakePHP会根据定义的表关系检索尽可能多的数据,为了避免这一点,在开发过程中,最好时刻保持DEBUG为2,了解SQL情况,并通过下面语句来调整生成的SQL:

$model->recursive = 0;
$model->unbindModel(...);


不管怎么说,这有些麻烦,对于这个问题,已经有人给出了一些解决方案,主要思想就是不要把什么都给我,我告诉你我要什么。但是因为还不是CakePHP的官方解决方案,所以在和官方一些组件(如分页组件)搭配使用的时候,可能会有问题,为了解决这样的问题,可能需要我们自定义组件。

编码开始的时候,我们的Model可能相当的瘦,相反,Controller却很胖,这是不理想的,但是为了前期开发的进度考虑,往往这样也是可以接受的,不过随着项目的进行,我们就需要逐渐重构我们的Model和Controller,把业务逻辑转移到Mode中,并尽量避免在Controller中使用unbindModel,转而尽量把他放在Model中。

对于(un)bindModel,一旦在Controller中出现,我们就要考虑在Model中加入一个适当的方法,然后把unbindMode相关代码转移过去,Controller改为调用Model方法。

--------------------------------------------------------


CakePHP的模型behavior是个很NB的功能,其原理相当简单,只是利用简单的回调函数而已,但是却给了模型很大的扩展空间,目前官方behavior还不多,我也只用过Tree behavior,感觉非常COOL,你只要以常见的id, parent_id方式操作树结构,CakePHP内部就能自动转化为先根遍历树要求的格式,对程序员是完全透明的。

不过因为官方文档不全,使用的时候可能会遇到一些问题,以Tree behavior为例,主要是利用先根遍历树算法来实现对无限分类数据的存储,对应到数据库设计上,就是多了left_id和right_id两个标识字段,我最开始用这个行为的时候把这两个字段的缺省值设置为了0,结果程序死活都不能正常运行,文档也没有相关介绍,后来看源代码才发现,只有缺省定义为NULL才能正常运行。

再说说我对视图中layout的感觉,可能是因为习惯的原因,我还是不太喜欢这个东西,一般而言,layout就是页面里除了body以外的内容(一般而言),相当于定义一个视图的容器或者骨架。但是我的项目中,实际很难抽象出一致的layout,如果分门别类又显得太多,所以,我定义了一个名叫blank的layout,内容是空,相当于变相的跳过了layout。还有一个让我觉得layout不爽的地方,就是我们再用DW编辑CTP模板文件的时候,它不再是百分百所见所得的了。

好了,先说这些,做饭去:面霸+鸡蛋。

TOP

努力为phpres做贡献
时刻准备着,当机会来临时你就成功了
打好基础,增加社会经验
资深技术工程师是我的梦想
承接各种团体网站外包服务和各种it技术培训
准备申请AJAX版大,希望大家支持~~

TOP

发新话题