系统版本:UCenter 1.5.0 Release 20081224
整体架构分析:
Ucenter采用单点入口方式,以admin.php 为程序的单点入口
Ucentert是通过url的地址映射+表单提交来实现单点入口方式的。具体见代码 Admin.php
//$m 用来获取 url或者form提交来的 m参数的值 <用来控制调用哪个control文件> // $a 用来获取url或者form提交来的 a 参数的值<用来控制调用control类的哪个方法> Admin.php
//该代码就是用来实现单一入口的。根据不同的$m值 调用不同的控制器
// $method=‟on.‟.$a 以及后面的 $control->$method() 根据不同的$a值 调用控制器中不同的方法
MVC实现分析
先从整体上来看
Admin.php作为系统的单点入口,调用不同的控制器,然后控制器调用数据模型module从数据库中获取数据存入变量中,控制器再将一些变量值传给模板,控制器再调用模板类 创建视图view 。控制器control 在这里起着枢纽作用,他调用模型以查询数据库,再将数据传递到模板以显示。
深度分析
这里以 user控制器 为示例来分析 文件 /control/admin/user.php
首先 通过 $this->view->assign(“a”,$b) 将变量值传递到模板文件中
再通过$this->view->display(„admin_login‟) 打开模板文件 /view/default/admin_login.php 并经过模板类编译 将编译后的显示文件 包含到/control/admin/user.php 中来。
整个流程如下: 先说下类之间的关系
/model/base.php 包含 base类
/model/admin.php包含 adminbase类 /control/admin/user.php包含control类
Control类 继承自 Adminbase类 继承自 Base类
Admin.php 文件
require UC_ROOT.'model/base.php'; //基本数据模型<其中base类包含模板类的初始化> require UC_ROOT.'model/admin.php'; //管理数据模型
include UC_ROOT.\"control/admin/user.php\";//通过该语句调用congtrol类
文件 /control/admin/user.php control类 ($this->view在 base类中已经赋值
在BAES中代码如下require_once UC_ROOT.'lib/template.class.php'; $this->view = new template(); )
$this->view->assign('iframe', $iframe); //赋值,通过该方法将变量传递给VIEW $this->view->display('admin_login'); //调用template 类的display方法
文件 /lib/template.class.php template 类
通过 gettpl($file); 来替换掉需要替换的 变量 标签,并编译成 可显示文件 存放于/data/view/中,该函数返回生成的文件地址。
通过include $this->gettpl($file); 来包含该显示文件
实验:
<新建一个控制器>首先在control/admin 文件夹下新建 test.php 文件 代码如下
然后再新建一个 模板文件/view/default/test.htm 代码如下
再在 admin.php
In_array处 加入 „test‟
在地址栏木输入http://localhost:1108/admin.php?m=test&a=test 测试下 看显示什么
因篇幅问题不能全部显示,请点此查看更多更全内容