学艺未精,欢迎拍砖。
玩过drupal的Yiier都知道,drupal吸引人的地方在于,它有强大的hook。自己建一个module的话,定义的函数只要符合一定的规范,那么在执行请求的时候,都会执行到自己建的module的函数,这样做的好处是什么呢?好就好在,处理请求的时候,自己想对那些数据怎么弄就怎么弄,加上一些数据啊,改变原来的数据啊都可以,到了最后输出的时候就会达到自己想到的结果。
由于我用Yii的实际经验不是很多,特别是behavior这一块,还真的没有体验到它的强大的地方,只是偶尔会在model里面用用那个自动插入时间,不过我看了CTimestampBehavior这个类,大概的意思是,覆盖beforeSave方法,这样在model进行save的时候,随着model的onBeforeSave一起使用,实际上CTimestampBehavior也是使用onBeforeSave的,不过在CActiveRecordBehavior这个父类里面,已经对这个方法进行了重命名为beforeSave(这是我在CActiveRecordBehavior的events()方法里面看到有这样的array,是这样理解它的重命名吧?),不知道这样算不算做hook,不过从我上面对drupal理解描述来看,功能相当于hook。
ok,说说Yii的module(应该说是,基本上现在流行的framework都是这样,我知道的如,zend framework,cakephp,QeePHP),基本上是,一个module是实现一个功能,而不是对数据的有一个流水线的处理(请原谅我见识比较浅薄,我暂时还是觉得是这样的),什么是流水线处理数据呢?就好比一个纸箱是怎么弄出来,首先只是一些木桨,经过机器1,变成一张纸皮,经过机器2,变成一个方形结构,再经过人工后期的稍微修饰,就可以变成一个纸箱,这过程就是对木桨这个“数据”的操作,每个机器相当于一个module,整个过程是一个流水线~
在我的理解内,既然behavior相当于做hook,那么module要怎么来实现这样的功能呢?做一个module,按照一定的规范就可以对现有的数据进行自己的处理?
当然,我也明白,这不是Yii要做的东西,因为Yii只是框架而不是应用,不过如果真的要用Yii来做像drupal(肯定不是像drupal这样啦,drupal偏向于面向过程。。。),用Yii做这样的CMS,该如何做module来实现那样的hook功能呢?用behavior?貌似没有一个叫做CControllerBehavior的类进行hook。
不懂不懂,描述得也比较混乱,希望大家能够看得明白我在说什么,