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交互,並返回結果。