很早前就想寫一些關於php實現mvc的新的體會。今天就開始詳細的寫寫我對mvc的一些理解,以及我在開發過程中實現自己的乙個框架的乙個流程。其中或許說的不正確,還望指正!
m是指model。controller 並不參與業務邏輯,整個業務邏輯部分應該是放在 model 層中的。controller 只起到分發請求的作用,也就是說得到當前的 request,決定呼叫哪個 model 獲取資料,然後再賦值給哪個 view 來渲染頁面
具體實現mvc,我覺得最好還是要做到單點入口。
什麼是單點入口呢?所謂單點入口就是整個應用程式只有乙個入口,所有的實現都通過這個入口來**,比如說在上面我們就使用index.php作為程式的單點入口,當然這個是可以由你自己任意控制的。
為什麼要做到單點入口呢?單點入口有幾大好處:第
一、一些系統全域性處理的變數,類,方法都可以在這裡進行處理。比如說你要對資料進行初步的過濾,你要模擬session處理,你要定義一些全域性變數,甚至你要註冊一些物件或者變數到註冊器裡面(主要是實現在全域性,具體你可以參考我先前翻譯的一些文章
《在php中使用全域性變數》)。第
二、程式的架構更加清晰明了。當然好處還有很多的,我也不一一枚舉了,具體你可以去體會。
當然單點入口也存在一些不足,比如你系統大了後,不可能只乙個點做為入口,尤其系統存在兩個完全不相關的功能時候,不過很高興的說,這個是可以擴充套件,你可以擴充套件多個入口。比如說在最近乙個大專案中,後台的管理和前台是不相關的,所以我就會有兩個入口,乙個是index.php乙個是admin.php。但這不不是說單點入口不好(具體含義你可以揣摩下)。
《回答phpchina上的幾個問題:url對映》,裡面實現了單點入口的核心,這裡我具體實現,並演示下)。單點入口最關鍵的就是通過url傳遞引數來實現程式的分配,具體說,比如:位址是index.php?controller=test&action=test,這就通過index.php把請求**到對應的testcontroller檔案中,並執行其對應的testaction方法(這裡的控制器和方法的命名都參考了zend framework的思想)。
下面我們用最簡單的方法是來實現上面說的單點入口(記住:簡單起見,我這裡沒有使用url映**)
/index.php
<?
define
('site_path'
,str_replace(''
,'/'
,dirname
(__file__
)));
//定義系統目錄
$controller
=(!empty(
$_get
['controller'
]))?
$_get
['controller'
]:'index'
;//獲取控制器,預設index
$action
=(!empty(
$_get
['action'
]))?
$_get
['action'
]:'index'
;//方法名稱,預設index
$controller_name
=$controller
.'controller'
; $controller_file
=site_path..
$controller_name
.'.class.php'
;//獲取控制器檔案
if(file_exists
($controller_file
))();
}else
?>
對應的乙個演示demo
<?
class
testcontroller }
?>
開啟瀏覽器,輸入http://path/to/yoursite/index.php?controller=test&action=test(注意相應的修改你的路徑),如果你看到hello,world!說明mvc第一步,單點入口成功了!
php簡單實現MVC
php中的mvc mvc 1 在軟體工程中是一種軟體的架構。從php的角度來講mvc有一些不同。model 模型 程式應用功能的實現,程式的邏輯的實現。在php中負責資料管理,資料生成。view 檢視 圖形介面邏輯。在php中負責輸出,處理如何呼叫模板 需要的資源檔案。controller 控制器 ...
php簡單實現MVC
php中的mvc mvc 1 在軟體工程中是一種軟體的架構。從php的角度來講mvc有一些不同。model 模型 程式應用功能的實現,程式的邏輯的實現。在php中負責資料管理,資料生成。view 檢視 圖形介面邏輯。在php中負責輸出,處理如何呼叫模板 需要的資源檔案。controller 控制器 ...
PHP之簡單實現MVC框架
1.概述 mvc全名是model view controller,是模型 model 檢視 view 控制器 controller 的縮寫,一種軟體設計典範,用一種業務邏輯 資料 介面顯示分離的方法組織 將業務邏輯聚集到乙個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。...