UCenter (二) 目录结构之一

安装完之后,就可以使用了。ucenter的实现,算是一个比较简单,也比较标准的单点入口MVC模式。了解UCenter是为了更好的扩展它。想要做到使用了UCenter的自动升级之后,而在源代码没改动一点的情况下,扩展功能还是正常使用的。当然,这个目标能否达到,除了要看自己扩展的好不好之外,还要看UCenter在升级的时候对兼容性的考虑是否足够了。

根目录下就五个文件:

admin.php    后台的单点入口文件。
avatar.php    头像入口文件。
crossdomain.xml    好像是Adobe公司规定Flash对本站文件读取的权限控制,好像
index.php    前台(即应用)的单点入口文件。UCenter的前台没有html表现,只是返回一个状态数字,或者是一个xml。
robots.txt    对搜索蜘蛛设置规则用的。

以下三个目录,对应着MVC结构的三个层:

/control    MVC结构的C层,控制层。根目录下的为前台控制器。一般情况下,一个功能模块并对应有一个控制器。根目录下定义的类是以control结尾的(不包括admin子目录)。
/control/admin    定义了后台的控制器。里面定义的类都是以control命名的(除了plugin.php)。
/control/admin/plugin.php    定义了pluginbase类。继承于adminbase,将作为/plugin目录下定义的插件控制器的父类。
/control/admin/ucfiles.md5    文本文件 ,UCenter所有源文件的md5清单。filecheck插件将会用它来判定文件是否被修改过了。

/model    MVC结构的M层,模型层。
/model/base.php    定义了base类,所有control类的根父类,即是说所有的control里的类直接继承或间接的继承于这个类。其实我不明白这个文件为什么不放在/control目录里,而要放在放在/model里,让我一开始以为这是所有model类的根父类。
/model/admin.php    定义了adminbase类,本身继承于base类,是所有/control/admin里定义的类的父类。
/model/xxxxxx.php    这里用xxxxxx代表了其他文件(不包括上面那两个原来应该出现在/control目录里的家伙)。这里定义的类,都是以model结尾的。一般一个数据库表对应一个model,当然UCenter同样与这样的一般有些许出入。

/view    MVC结构的V层,视图层。里面就是存htm文件的。
/view/default    默认风格。现在在多数的应用,都是这样布局的,可以一键就改变整站的风格。但是UCenter几乎没有前台表现,而后台又以实用性为主。所以这个改变风格的设置在UCenter里也是没有的。

一个类库目录:

/lib    功能实现相关的类(库)或文件。sendmail.inc.php在功能函数sendmail中调用了,其他的.class.php结属的为类库文件,一般Java中要求类文件(当然Java都是类文件)的文件名要与类名相同,且首字每大字,多个字母用驼峰式。显示UCenter并没有完全遵守这个命名方式。
/lib/db.class.php    操作MySql数据。
/lib/seccode.class.php    生成验证码图片。
/lib/template.class.php    页面生成。通过这个类把/view里的.htm生成为/data/view里的.php文件
/lib/uccode.class.php    定义了UCenter里通用的一种字符标签规则,并提供了转化方法。比如[color=xxx]标签就是代表<font color=xxx>。
/lib/upload.class.php    文件上传功能的包装类,提供了生成缩小图,水印等功能。实现上我在整个UCenter中并没有发现哪里调用了这个类。

综述:

所有的后台页面的格式总会是有 “admin.php?m=$m&a=$a” 当然可能参数不仅仅是m和a两个,但这两个一定会有。
所有的前台调用的格式都会是有 “index.php?m=$m&a=$a&input=$input” 可能还有release参数。
而头像获取的格式会是 “avatar.php?uid=$uid&size=$size”

PS:不考虑伪静态的情况。实际上UCenter没有任何伪静态的意义。

因为UCenter的前台本身就是API,没有任何界面,如果直接进index.php而没有带上m和a的话,会跳转到admin.php。

入口 admin.php 中
1.得到GET参数$m,调用/control/admin/$m.php ,实例化control类。
2.得到GET参数$a,调用control类里的”on$a” 方法。
3.在每个on方法里,把通过/model里的类读取数据库,取得必须数据,在通过/view里的.htm文件,和/lib里的template.class.php类,生成一个文件,存于/data/view下面,再把这个生成的文件显示出来。就是我们看到的页面了。

index.php 中
1.得到GET参数$m,调用了/control/$m.php (如果存在/release/$release/control/$m.php的话,会优先调用这个)。实例化这个 $m control,比如m=user 那么就是实例化usercontrol。
2.得到GET参数$a,调用control类里的”on$a” 方法。
3.在每个on方法里,把GET参数$input解密成明文,通过/model里的类读取数据库,取得必须数据,通过逻辑之后,会在这个on方法里返回一个数字或者一个数组。
4.index.php 中会得到以上on方法中返回值,调用/lib/xml.class.php 把数组变成xml文档输出,非数组则直接输入。同样,如果存在/release/$release/lib/xml.class.php这个文件的话,会优先调用这里。

avatar.php 中
这个比较简单,通过GET参数uid和size就会Location到这个jpg文件的路径。

您可能还喜欢...