PHP實現MVC開發最簡單方法是單點入口

來源:互聯網
上載者:User

今天就開始詳細的寫寫我對MVC的一些理解,以及我在開發過程中實現自己的一個架構的一個流程。其中或許說的不正確,還望指正!

網站關於MVC的教材很多了,我這裡不具體說了,不明白的,推薦自己上百度搜尋下“MVC”,相信可以找到你想要的東西的。這裡我談談在PHP實際開發中,我對MVC的理解。M,module,主要任務是把資料庫或者其他檔案系統的資料按照我們需要的方式讀取出來。V,view,我的理解是主要負責頁面的先是,把資料以html的形式顯示給使用者。C,controller,主要負責商務邏輯,比如說你要顯示登陸介面,就需要調用一個控制器userController的方法loginAction來顯示(可能這個不需要調用module),再比如你進行登陸檢查就可以調用userController的方法checkAction來進行邏輯處理。

引用

M是指model。Controller 並不參與商務邏輯,整個商務邏輯部分應該是放在 Model 層中的。Controller 只起到分發請求的作用,也就是說得到當前的 Request,決定調用哪個 Model 擷取資料,然後再賦值給哪個 View 來渲染頁面

具體實現MVC,我覺得最好還是要做到單點入口。

什麼是單點入口呢?所謂單點入口就是整個應用程式只有一個入口,所有的實現都通過這個入口來轉寄,比如說在上面我們就使用index.php作為程式的單點入口,當然這個是可以由你自己任意控制的。

為什麼要做到單點入口呢?單點入口有幾大好處:第一、一些系統全域處理的變數,類,方法都可以在這裡進行處理。比如說你要對資料進行初步的過濾,你要類比session處理,你要定義一些全域變數,甚至你要註冊一些對象或者變數到註冊器裡面(主要是實現在全域,具體你可以參考我先前翻譯的一些文章《在PHP中使用全域變數》)。第二、程式的架構更加清晰明了。當然好處還有很多的,我也不一一列舉了,具體你可以去體會。

當然單點入口也存在一些不足,比如你系統大了後,不可能只一個點做為入口,尤其系統存在兩個完全不相關的功能時候,不過很高興的說,這個是可以擴充,你可以擴充多個入口。比如說在最近一個大項目中,背景管理和前台是不相關的,所以我就會有兩個入口,一個是index.php一個是admin.php。但這不不是說單點入口不好(具體含義你可以揣摩下)。

那麼,如何?單點入口呢?這是我本節的重點。一般來說都是通過url的地址映射實現的(前面我有一篇文章說到這個:《回答PHPCHINA上的幾個問題:URL映射》,裡面實現了單點入口的核心,這裡我具體實現,並示範下)。單點入口最關鍵的就是通過url傳遞參數來實現程式的分配,具體說,比如:地址是index.php?controller=test&action=test,這就通過index.php把請求轉寄到對應的testController檔案中,並執行其對應的testAction方法(這裡的控制器和方法的命名都參考了Zend
Framework的思想)。

下面我們用最簡單的方法是來實現上面說的單點入口(記住:簡單起見,我這裡沒有使用URL映射了)

/index.php

<?

/**

* MVC示範demo

* 僅僅實現最基本的MVC功能,不包含安全處理,資料過濾,及其他最佳化措施。

*/

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.’/app/controller/’.$controller_name.’.class.php’;//擷取控制器檔案

if(file_exists($controller_file)){

require_once($controller_file);

$controller=new $controller_name();

$controller->{$action.’Action’}();

}else{

die(‘找不到對應的控制器!’);

}

?>

對應的一個示範demo

/app/controller/testController.class.php(注意路徑)

<?

/**

* MVC示範demo

* 僅僅實現最基本的MVC功能,不包含安全處理,資料過濾,及其他最佳化措施。

*/

class testController

{

function testAction(){

echo ‘Hello,World!’;

}

}

?>

開啟瀏覽器,輸入http://path/to/yoursite/index.php?controller=test&action=test(注意相應的修改你的路徑),如果你看到Hello,World!說明MVC第一步,單點入口成功了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.