PHP教程:UCenter的MVC架构
http://www.itjxue.com 2015-07-17 08:18 来源:未知 点击次数:
UCenter是采用很经典的MVC架构
UCenter采用index.php单点入口
01.$m = getgpc('m'); //判断加载哪一个Model 02.$a = getgpc('a'); //判断加载哪一个Control 03.$release = getgpc('release'); 04.if(empty($m) && empty($a)) { //如果直接访问则跳转到管理界面 05.header('Location: admin.php'); 06.exit; 07.} 08. 09.//版本判断 10.if(empty($release)) { 11.define('RELEASE_ROOT', "release/20080429/"); 12.} elseif(intval($release) != UC_SERVER_RELEASE) { 13.define('RELEASE_ROOT', "release/$release/"); 14.} else { 15.define('RELEASE_ROOT', ''); 16.} 17.//加载基类,基类中定义了很多的方法,所有控制器类都继承于该基类 18.if(file_exists(UC_ROOT.RELEASE_ROOT.'model/base.php')) { 19.require UC_ROOT.RELEASE_ROOT.'model/base.php'; 20.} else { 21.require UC_ROOT.'model/base.php'; 22.} 23.//判断是否加载的是指定的model 24.if(in_array($m, array('app', 'frame', 'user', 'pm', 'pm_client', 'tag', 'feed', 'friend', 'domain', 'credit', 'mail', 'version'))) { 25.if(file_exists(UC_ROOT.RELEASE_ROOT."control/$m.php")) { 26.include UC_ROOT.RELEASE_ROOT."control/$m.php"; 27.} else { 28.include UC_ROOT."control/$m.php"; 29.} 30.$classname = $m.'control'; //构造control类,如$m=user时control就为usercontrol 31.$control = new $classname(); 32.$method = 'on'.$a; //构造方法名 33. 34.if(method_exists($control, $method) && $a{0} != '_') { //如果方法存在且不是私有方法则执行该方法 35.$data = $control->$method(); 36.echo is_array($data) ? $control->serialize($data, 1) : $data; 37.exit; 38.} elseif(method_exists($control, '_call')) { //否则执行重载 39.$data = $control->_call('on'.$a, ''); 40.echo is_array($data) ? $control->serialize($data, 1) : $data; 41.exit; 42.} else { 43.exit('Action not found!'); 44.} 45.} else { 46.exit('Module not found!'); 47.}假定我们检测用户登录,那么对应的接口址就为:
xxx/index.php?m=user&a=login
这样,就会初始化usercontrol并调用onlogin方法,看看usercontrol的onlogin()
model层直接与数据库交互,control层与model层交互,得到结果,返回给view。
如果我们要扩展自己的方法该怎么办?
首先,增加model类,定义我们所需要的方法,直接与DB进行交互。
其次,增加control类,并继承自base,定义on{xxxx}方法,与相对的model交互,并返回结果。