MVC框架開發(fā)過程_第1頁
MVC框架開發(fā)過程_第2頁
MVC框架開發(fā)過程_第3頁
MVC框架開發(fā)過程_第4頁
MVC框架開發(fā)過程_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

在開始之前需要同學(xué)們知道的知識php基礎(chǔ)知識單一入口,不知道的可以看看這里(/phpx/jiqiao2009112313545.html)具備以上兩點,那我們就可以開始啦.先來說一下程序的執(zhí)行流程首先有個入口文件,然后初始化一些程序,之后根據(jù)請求調(diào)用不同的類和方法首先我們弄一個入口文件Index.php來看看代碼<?phprequire\"Init.php\";是$control=newController();$control->Run();?>s代碼沒什么特別的,首先先引入Init.php文件然后實例化一個類然后調(diào)用該類的Run()方法這里我們把這個類叫做控制器既然引入了Init.php文件,那么我們繼續(xù)看看Init.php文件的源碼<?phpheader(\"Content-type:text/html;charset=utf-8\");!defined('ROOT_PATH')&&define('ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));requireROOT_PATH.'/Core/Config.php';〃引入配置文件requireROOT_PATH.'/Core/Controller.class.php';//引入控制器類文件requireROOT_PATH.'/Core/View.class.php';/艦圖類文件requireROOT_PATH.'/Core/Model.class.php';/模型類文件?>分析一下代碼,如果你懂了,可以略過這一步,繼續(xù)往下看哦.首先設(shè)置字符集,然后判斷如果沒有定義常量"ROOT_PATH1那么就定義它然后就是引入一些文件,首先是配置文件,控制器類文件,視圖類文件,模型類文件同理既然引入了文件,那么我們就打開文件看看代碼,先來看Config.php文件<?php$C=array('URL_MODE'=>1,//URL模式,1普通模式,2PATH_INFO模式是'DEFAULT_CONTROL'=>'welcome',//默認(rèn)調(diào)用的控制器'DEFAULT_ACTION'=>'index',//默認(rèn)執(zhí)行的方法);?>沒什么特別的就是一個數(shù)組,有三個值,暫時先這樣,以后有需要在來增加那么好,我們繼續(xù)看Controll.class.php<?phpclassController{publicfunctionRun(){$this->Analysis();〃開始解析URL獲得請求的控制器和方法$control=$_GET['c'];$action=$_GET['a'];〃這里構(gòu)造出控制器文件的路徑$controlFile=ROOT_PATH.'/Controllers/'.$control.'.class.php';if(!file_exists($controlFile))〃如果文件不存在提示錯誤,否則引入{exit('控制器不存在'.$controlFile);}include($controlFile);$class=ucwords($control);//將控制器名稱中的每個單詞首字母大寫,來當(dāng)作控制器的類名if(!class_exists($class))//判斷類是否存在,如果不存在提示錯誤{exit('為定義的控制器類'.$class);}$instance=new$class();〃否則創(chuàng)建實例if(!method_exists($instance,$action))//判斷實例$instance中是否存在$action方法,不存在則提示錯誤{exit('不存在的方法'.$action);}$instance->$action();}/***解析URL獲得控制器與方法**@accessprotected*@returnvoid*/protectedfunctionAnalysis(){global$C;〃包含全局配置數(shù)組,這個數(shù)組是在Config.ph文件中定義的//根據(jù)配置文件Config.php中的全局?jǐn)?shù)組$c,根據(jù)$c[‘URL_MODE’]的值判斷url的模式,從而知道如何獲取控制器和方法if($C['URL_MODE']==1)//如果URL模式為1那么就在GET中獲取控制器,也就是說url地址是這種的http://localhost/index?php?c^制器&a=方法{$control=!empty($_GET['c'])?trim($_GET['c']):'';$action=!empty($_GET['a'])?trim($_GET['a']):'';} 一 一elseif($C['URL_MODE']==2)//如果為2那么就是使用PATH_INFO模式,也就是url地址是這樣的http://localhost/index?php/控制器/方法/其他參數(shù){if(isset($_SERVER['PATH_INFO'])){//$_SERVER['PATH_INFO']URL地址中文件名后的路徑信息,不好理解,來看看例子//比如你現(xiàn)在的URL是/index.php那么你的$_SERVER['PATH_INFO']就是空的〃但是如果URL是/index.php/abc/123//現(xiàn)在的$_SERVER['PATH_INFO']的值將會是index.php文件名稱后的內(nèi)容/abc/123/$path=trim($_SERVER['PATH_INFO'],'/');$paths=explode('/',$path);$control=array_shift($paths);$action=array_shift($paths);}}上面的代碼從url地址中獲取了控制器和方法//這里判斷控制器的值是否為空,如果是空的使用默認(rèn)的$_GET['c']=$control=!empty($control)?$control:$C['DEFAULT_CONTROL'];//和上面一樣$_GET['a']=$action=!empty($action)?$action:$C['DEFAULT_ACTION'];}}?>注釋寫的很清楚,這里我就不多說了,做到這,你就可以建立一個Controller目錄,然后在目錄中建立welcome.class.php文件寫入如下內(nèi)容<?phpclassWelcome{publicfunctionindex(){secho'Hello';}}?>允許程序你將會看到Hello然后在寫一個方法<?phpclassWelcome{publicfunctionindex(){echo'Hello';}publicfunctionshow(){echo'方法名稱Show';}}?>再次運行程序,將url地址改為http://你的域名/index.php/welcome/show/你會看到’方法名稱Show'好了,看到這里我們的控制器其實已經(jīng)弄得差不多了現(xiàn)在我來看看視圖基類<?phpclassView{protected$vars=array();protectedfunctionassign(){}protectedfunctiondisplay(){}}?>是不是很熟悉這兩個方法,呵呵,用來給模板設(shè)置變量和顯示模板的.和smarty一樣,$vars屬性是用來保持模板變量的數(shù)組,我來寫完它.先看看assign方法<?phppublicfunctionassign($var,$value){if(is_array($var)){$this->vars=array_merge($this->vars,$var);}else{$this->vars[$var]=$vaule;}}?>很簡單,首先有兩個參數(shù)$var模板變量名稱,$value對應(yīng)的值先判斷$var是否是數(shù)組,如果是那么將他于屬性$vars合并將$var當(dāng)作下標(biāo)$value當(dāng)作值,添加到屬性$vars中在來看display方法<?phppublicfunctiondisplay($file){include(ROOT_PATH.'/Core/Template.class.php');$this->template=Template::GetInstance();$this->template->templatePath=ROOT_PATH.'/Views/';$this->template->cache=TRUE;$this->template->cachePath=ROOT_PATH.'/Cache/';$this->template->cacheLifeTime=1;$this->template->templateSuffix='.html';$this->template->leftTag='{';$this->template->rightTag='}';$templateFile=ROOT_PATH.'/Views/'.$file.'.html';if(!file_exists($templateFile)){exit('模板文件'.$file.'不存在');}$this->template->display($file,$this->vars);}?>這個看上去有點多,不著急我們慢慢解釋首先有一個參數(shù)$file模板文件名稱,不包括路徑以及后綴然后引入模板類,設(shè)置模板的參數(shù)先設(shè)置模板文件目錄,然后是否開啟緩存,然后緩存目錄,緩存有效時間,模板文件后綴,左右定界符然后組合出模板文件路徑比如你傳入的$file值是index那么就是對應(yīng)的模板文件就是模板目錄/index.htmls然后判斷模板文件是否存在,不存在則提示錯誤然后在調(diào)用模板類實例的display方法將模板文件名稱,和模板變量傳入這里這個模板類我就不多說了,如果有興趣的朋友可以下載附件查看,類中有詳細(xì)注視這里既然設(shè)置了兩個目錄,那么我們就去創(chuàng)建它,在程序根目錄下建立Views和Cache兩個目錄,后面會用到現(xiàn)在我們打開昨天寫好的Controller.class.php控制器類在里面加入一個屬性和幾個方法<?phpprotected$view=NULL;publicfunction__construct(){ —//實例化上面寫到的視圖類$this->view=newView();}publicfunctionassign($var,$value=''){$this->view->assign($var,$value);}publicfunctiondisplay($file){$this->view->display($file);}?>現(xiàn)在進(jìn)入到Views目錄中建立一個模板命名為index.html內(nèi)容如下<html><head><title>{$title}</title></head><body>{$body}</body></html>控制器類中也有assign方法,他是調(diào)用構(gòu)造函數(shù)中創(chuàng)建的view類實例的assign方法也就是我們上面定義的那個dispaly方法也一樣現(xiàn)在我們打開welcome.class.php文件,修改index方法,注意這里好要將Welcome類繼承自Controller類<?phpclassWelcomeextendsController{publicfunctionindex(){$this->assign('title','HelloWorld');$this->assign('body','小愷教你寫一個屬于自己的MVC框架');$this->display('index');}}?>現(xiàn)在你需要做的就是打開瀏覽器,在地址欄中輸入http://yourdomain/Index.php然后你將會看到"小愷教你寫一個屬于自己的MVC框架"如果出現(xiàn)了這行字,那么恭喜你View層也搞定了,明天我們繼續(xù)小愷教你寫一個屬于自己的MVC框架之模型如果你沒看懂這篇文章也可以聯(lián)系QQ601200376Emailmyxiaokai@最后希望大家多多支持...哈哈廣告一下TomorrowFramework0.1測試版以經(jīng)快完工了,想看看的朋友可以聯(lián)系我,"源文件有詳細(xì)注視哦!!!"接著上集,我們來說模型的實現(xiàn).在Core目錄中建立Model.class.php文件,然后建立一個Model類<?phpclassModel{〃數(shù)據(jù)庫連接句柄protected$dbLink=NULL;}?>現(xiàn)在來給他添加方法<?php/***構(gòu)造器,連接數(shù)據(jù)庫*@accesspublic@returnvoid*/publicfunction__construct(){global$C;or$this->dbLink=mysql_connect($C['DB_HOST'],$C['DB_USER'],$C['DB_PWD'])exit(mysql_error());ormysql_select_db($C['DB_NAME'],$this->dbLink)orexit(mysql_error());mysql_query(\"SETNAMES{$C['DB_CHAR']}\");}/***執(zhí)行SQl命令*@accesspublic@paramstring$sql@returnresource*/publicfunctionQuery($sql){$res=mysql_query($sql)orexit(mysql_error());return$res;}/***執(zhí)行SQl命令,返回是否執(zhí)行成功*@accesspublic@paramstring$sql@returnbool*/publicfunctionExecute($sql){if(mysql_query($sql)){returnTRUE;}returnFALSE;}/***返回處理后的結(jié)果集*@accesspublic@paramresource$res結(jié)果集@returnmixed*/publicfunctionFetch($res,$type='array'){$func=$type=='array'?'mysql_fetch_array':'mysql_fetch_object';$row=$func($res);return$row;}?>這幾個方法很簡單,就是一般的mysql操作.不過多解釋現(xiàn)在打開Config.php把內(nèi)容改為<?php$C=array('URL_MODE'=>2,//URL模式,1普通模式,2PATH_INFO模式'DEFAULT_CONTROL'=>'welcome',//默認(rèn)調(diào)用的控制器'DEFAULT_ACTION'=>'index',//默認(rèn)執(zhí)行的方法'DB_HOST'=>'localhost',//mysql主機'DB_USER'=>'root',//mysql用戶'DB_PWD'=>'',//mysql密碼'DB_CHAR'=>'utf8',〃字符集'DB_NAME'=>'test',〃使用的數(shù)據(jù)庫);?>然后在打開Controller.class.php控制器基類在里面加一個方法,用來加載模型<?phpprotectedfun

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論