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