摘要:作者作為的入門進(jìn)階,自己動(dòng)手寫一個(gè)框架可以從各方面鞏固和加深你對的理解,還能了解一些架構(gòu)方面的基礎(chǔ)知識(shí)。它將程序劃分為三層。最上面的一層,是直接面向最終用戶的視圖層。最底下的一層,是核心的模型層,負(fù)責(zé)檢索組織和處理程序所需的數(shù)據(jù)或信息。
作者:Terry Gao
作為PHP Coder的入門進(jìn)階,自己動(dòng)手寫一個(gè)MVC框架可以從各方面鞏固和加深你對PHP的理解,還能了解一些架構(gòu)方面的基礎(chǔ)知識(shí)。
1. 什么是MVCMVC(Model-View-Controller,模型-視圖-控制器)是PHP最常見的一種開發(fā)模式。它將程序劃分為三層。
最上面的一層,是直接面向最終用戶的"視圖層"(View)。它負(fù)責(zé)給用戶提供操作界面,是程序的外殼。
最底下的一層,是核心的"模型層"(Model),負(fù)責(zé)檢索、組織和處理程序所需的數(shù)據(jù)或信息。
中間的一層,就是"控制層"(Controller),它負(fù)責(zé)根據(jù)用戶從"視圖層"輸入的指令,選取"模型層"中的數(shù)據(jù),然后根據(jù)業(yè)務(wù)邏輯對其進(jìn)行相應(yīng)的操作,并產(chǎn)生最終結(jié)果。
2. 起步文件結(jié)構(gòu)如下
www目錄將作為網(wǎng)站的根目錄,可以在Apache或Nginx的vhost配置中將www指定為Document Root,將核心代碼放在根目錄以外,使得用戶無法直接訪問到核心代碼,提高整站的安全性。
3. 入口既然www是根目錄,那www下的index.php就可以作為整站的入口,當(dāng)然,你也可以在www下繼續(xù)寫usercenter.php、admin.php等來作為其它模塊的入口,你只需要制定規(guī)則就好。
而作為入口,由于它可以接收到發(fā)往它的所有數(shù)據(jù),因此可以按照框架制定的路由規(guī)則對數(shù)據(jù)進(jìn)行分發(fā)處理。因此,在入口,需要引入初始化程序,然后進(jìn)行路由分發(fā)。
/* Nova/www/index.php */ 4. 初始化程序/* Nova/Framework/init.php */ run();初始化的過程涉及到了自動(dòng)加載類及Session的處理,這兩部分我們稍后介紹。先來說說核心處理程序,我把路由分發(fā)邏輯放在了這里。
5. 核心處理程序/* Nova/Framework/Core.php */ setReporting(); $this->route(); } /** * 設(shè)定整站的錯(cuò)誤報(bào)告等級 */ public function setReporting() { if (DEBUG_MODE === true) { error_reporting(E_ALL); ini_set("display_errors", "On"); } else { error_reporting(E_ALL); ini_set("display_errors", "Off"); ini_set("log_errors", "On"); ini_set("error_log", LOG_DIR . "error.log"); } } /** * 路由規(guī)則 * * 使用$_REQUEST["act"]來定位控制器的類 * 使用$_REQUEST["st"]來定位具體的方法 */ public function route() { //如果$_REQUEST中沒有"act",則設(shè)定默認(rèn)act為index if (!isset($_REQUEST["act"])) { $_REQUEST["act"] = "index"; } //如果$_REQUEST中沒有"st",則設(shè)定默認(rèn)act為main if (!isset($_REQUEST["st"])) { $_REQUEST["st"] = "main"; } //根據(jù)act定位控制器類 $className = "NovaApplicationControllers" . $_REQUEST["act"]; //判斷控制器類是否存在,不存在則報(bào)404 if (!class_exists($className)) { header("HTTP/1.1 404 Not Found"); die($className); } //生成目標(biāo)控制器類對象 $obj = new $className(); //判斷方法是否存在,不存在則報(bào)404 if (!method_exists($obj, $_REQUEST["st"])) { header("HTTP/1.1 404 Not Found"); exit; } //執(zhí)行目標(biāo)方法 $obj->$_REQUEST["st"](); } }你可以在Github上查看Nova項(xiàng)目的源代碼。
如果你有任何問題或建議,可以掃描下方二維碼或者微信搜索[phpjiagoushier],關(guān)注我的微信公眾號(hào)[PHP架構(gòu)],與我交流互動(dòng)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/22555.html
摘要:作者上一篇提到了類的自動(dòng)加載和,今天就來逐一說說。為這個(gè)問題提供了一個(gè)解決方案,這就是類的自動(dòng)裝載機(jī)制。為了方便使用自定義的全局,把方法也重寫了。 作者:Terry Gao 上一篇提到了類的自動(dòng)加載和Session,今天就來逐一說說。 1. 類的自動(dòng)加載 在使用PHP的OO模式開發(fā)系統(tǒng)時(shí),通常大家習(xí)慣將每個(gè)類的實(shí)現(xiàn)都存放在一個(gè)單獨(dú)的文件里,這樣會(huì)很容易實(shí)現(xiàn)對類進(jìn)行復(fù)用,同時(shí)將來維護(hù)時(shí)也...
摘要:假設(shè)我們站點(diǎn)的域名是,用戶請求地址。模型層我們可以將數(shù)據(jù)組織和處理邏輯放在模型層,這里封裝了數(shù)據(jù)庫操作,甚至有些大型的框架會(huì)在這一層對這個(gè)數(shù)據(jù)庫進(jìn)行對象化,目的都是為了組織和處理數(shù)據(jù),然后將處理好的數(shù)據(jù)返回給控制器層。 作者:Terry Gao 1. 控制器 第一篇我們聊到路由分發(fā)會(huì)把用戶請求按照規(guī)則分發(fā)到控制器層的不同類,而默認(rèn)的規(guī)則中,請求會(huì)下發(fā)到控制器的index類的main方法...
摘要:前記很早就想為自己寫一個(gè)東西,但是發(fā)現(xiàn)市面上的很多軟件其實(shí)遠(yuǎn)遠(yuǎn)的滿足了我的需求,這樣一來動(dòng)手創(chuàng)作的興致大大降低。說做就做,于是自己開始動(dòng)手策劃應(yīng)用的前端和后臺(tái)的各項(xiàng)事宜。 前記 很早就想為自己寫一個(gè)東西,但是發(fā)現(xiàn)市面上的很多軟件其實(shí)遠(yuǎn)遠(yuǎn)的滿足了我的需求,這樣一來動(dòng)手創(chuàng)作的興致大大降低。上周末去大潤發(fā)買點(diǎn)東西,回來記賬的時(shí)候發(fā)現(xiàn)手機(jī)上的記賬軟件很不舒服,對過往的數(shù)據(jù)沒有可視化的能力,于是...
摘要:服務(wù)器通過協(xié)議與客戶端通信,因此也被稱為服務(wù)器。本文標(biāo)題為從零開始搭建論壇一服務(wù)器與框架本文鏈接為更多閱讀自己動(dòng)手開發(fā)網(wǎng)絡(luò)服務(wù)器一自己動(dòng)手開發(fā)網(wǎng)絡(luò)服務(wù)器二自己動(dòng)手開發(fā)網(wǎng)絡(luò)服務(wù)器三服務(wù)器網(wǎng)關(guān)接口實(shí)現(xiàn)原理分析最佳實(shí)踐指南應(yīng)用淺談框架編程簡介 之前用 Django 做過一個(gè)小的站點(diǎn),感覺Django太過笨重,于是就準(zhǔn)備換一個(gè)比較輕量級的 Web 框架來玩玩。Web.py 作者已經(jīng)掛掉,項(xiàng)目好...
摘要:部署的地址我的博客地址起因最近買了個(gè)新的域名,同時(shí)在阿里云申請了免費(fèi)的虛擬主機(jī)。。。一個(gè)前端寫的博客系統(tǒng)前臺(tái)展示后臺(tái)登錄一個(gè)前端寫的博客系統(tǒng)文章的修改和刪除 部署的地址 我的博客地址:http://www.weber.pub/ 起因 最近買了個(gè)新的域名,同時(shí)在阿里云申請了免費(fèi)的虛擬主機(jī)。。。借此機(jī)會(huì)就想搞個(gè)自己的博客站點(diǎn),雖然之前也使用了hexo + github 、 WordPres...
閱讀 2101·2023-04-25 20:52
閱讀 2487·2021-09-22 15:22
閱讀 2125·2021-08-09 13:44
閱讀 1770·2019-08-30 13:55
閱讀 2809·2019-08-23 15:42
閱讀 2284·2019-08-23 14:14
閱讀 2877·2019-08-23 13:58
閱讀 3008·2019-08-23 11:49