溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

php mvc如何實(shí)現(xiàn)

發(fā)布時(shí)間:2020-11-20 10:36:49 來(lái)源:億速云 閱讀:141 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹php mvc如何實(shí)現(xiàn),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

php mvc的實(shí)現(xiàn)方法:首先定義系統(tǒng)目錄;然后獲取控制器;最后在瀏覽器中輸入“path/to/yoursite/index.php?controller=test&action=test”即可測(cè)試成功。

PHP實(shí)現(xiàn)MVC開(kāi)發(fā)得最簡(jiǎn)單的方法——單點(diǎn)入口

今天就開(kāi)始詳細(xì)的寫(xiě)寫(xiě)我對(duì)MVC的一些理解,以及我在開(kāi)發(fā)過(guò)程中實(shí)現(xiàn)自己的一個(gè)框架的一個(gè)流程。其中或許說(shuō)的不正確,還望指正!

網(wǎng)站關(guān)于MVC的教材很多了,我這里不具體說(shuō)了,不明白的,推薦自己上百度搜索下“MVC",相信可以找到你想要的東西的。這里我談?wù)勗赑HP實(shí)際開(kāi)發(fā)中,我對(duì)MVC的理解。M,module,主要任務(wù)是把數(shù)據(jù)庫(kù)或者其他文件系統(tǒng)的數(shù)據(jù)按照我們需要的方式讀取出來(lái)。V,view,我的理解是主要負(fù)責(zé)頁(yè)面的先是,把數(shù)據(jù)以html的形式顯示給用戶(hù)。C,controller,主要負(fù)責(zé)業(yè)務(wù)邏輯,比如說(shuō)你要顯示登陸界面,就需要調(diào)用一個(gè)控制器userController的方法loginAction來(lái)顯示(可能這個(gè)不需要調(diào)用module),再比如你進(jìn)行登陸檢查就可以調(diào)用userController的方法checkAction來(lái)進(jìn)行邏輯處理。(感覺(jué)Verdana的指正_)。

引用

M是指model。Controller 并不參與業(yè)務(wù)邏輯,整個(gè)業(yè)務(wù)邏輯部分應(yīng)該是放在 Model 層中的。Controller 只起到分發(fā)請(qǐng)求的作用,也就是說(shuō)得到當(dāng)前的 Request,決定調(diào)用哪個(gè) Model 獲取數(shù)據(jù),然后再賦值給哪個(gè) View 來(lái)渲染頁(yè)面

具體實(shí)現(xiàn)MVC,我覺(jué)得最好還是要做到單點(diǎn)入口。

什么是單點(diǎn)入口呢?所謂單點(diǎn)入口就是整個(gè)應(yīng)用程序只有一個(gè)入口,所有的實(shí)現(xiàn)都通過(guò)這個(gè)入口來(lái)轉(zhuǎn)發(fā),比如說(shuō)在上面我們就使用index.php作為程序的單點(diǎn)入口,當(dāng)然這個(gè)是可以由你自己任意控制的。

為什么要做到單點(diǎn)入口呢?單點(diǎn)入口有幾大好處:第一、一些系統(tǒng)全局處理的變量,類(lèi),方法都可以在這里進(jìn)行處理。比如說(shuō)你要對(duì)數(shù)據(jù)進(jìn)行初步的過(guò)濾,你要模擬session處理,你要定義一些全局變量,甚至你要注冊(cè)一些對(duì)象或者變量到注冊(cè)器里面(主要是實(shí)現(xiàn)在全局,具體你可以參考我先前翻譯的一些文章《在PHP中使用全局變量》)。第二、程序的架構(gòu)更加清晰明了。當(dāng)然好處還有很多的,我也不一一列舉了,具體你可以去體會(huì)。

當(dāng)然單點(diǎn)入口也存在一些不足,比如你系統(tǒng)大了后,不可能只一個(gè)點(diǎn)做為入口,尤其系統(tǒng)存在兩個(gè)完全不相關(guān)的功能時(shí)候,不過(guò)很高興的說(shuō),這個(gè)是可以擴(kuò)展,你可以擴(kuò)展多個(gè)入口。比如說(shuō)在最近一個(gè)大項(xiàng)目中,后臺(tái)的管理和前臺(tái)是不相關(guān)的,所以我就會(huì)有兩個(gè)入口,一個(gè)是index.php一個(gè)是admin.php。但這不不是說(shuō)單點(diǎn)入口不好(具體含義你可以揣摩下)。

那么,如何實(shí)現(xiàn)單點(diǎn)入口呢?這是我本節(jié)的重點(diǎn)。一般來(lái)說(shuō)都是通過(guò)url的地址映射實(shí)現(xiàn)的(前面我有一篇文章說(shuō)到這個(gè):《回答PHPCHINA上的幾個(gè)問(wèn)題:URL映射》,里面實(shí)現(xiàn)了單點(diǎn)入口的核心,這里我具體實(shí)現(xiàn),并演示下)。單點(diǎn)入口最關(guān)鍵的就是通過(guò)url傳遞參數(shù)來(lái)實(shí)現(xiàn)程序的分配,具體說(shuō),比如:地址是index.php?controller=test&action=test,這就通過(guò)index.php把請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的testController文件中,并執(zhí)行其對(duì)應(yīng)的testAction方法(這里的控制器和方法的命名都參考了Zend Framework的思想)。

下面我們用最簡(jiǎn)單的方法是來(lái)實(shí)現(xiàn)上面說(shuō)的單點(diǎn)入口(記?。汉?jiǎn)單起見(jiàn),我這里沒(méi)有使用URL映射了)

/index.php
<?
/**
* MVC演示demo
* 僅僅實(shí)現(xiàn)最基本的MVC功能,不包含安全處理,數(shù)據(jù)過(guò)濾,及其他優(yōu)化措施。
*/
define(‘SITE_PATH’,str_replace(‘‘,’/’,dirname(FILE)));//定義系統(tǒng)目錄
controller=(!empty(controller=(!empty(_GET[‘controller’]))?GET[‘controller′]:‘index′;
//獲取控制器,默認(rèn)indexGET[‘controller′]:‘index′;
//獲取控制器,默認(rèn)indexaction=(!empty(GET[‘a(chǎn)ction′]))?GET[‘a(chǎn)ction′]))?_GET[‘a(chǎn)ction’]:‘index’;
//方法名稱(chēng),默認(rèn)index
controllername=controllername=controller.‘Controller’;
controllerfile=SITEPATH.‘/app/controller/′.controllerfile=SITEPATH.‘/app/controller/′.controller_name.‘.class.php’;//獲取控制器文件
if(file_exists(controller_file)){ 
require_once(controller_file)){ require_once(controller_file);
controller=newcontroller=newcontroller_name();
controller->{controller->{action.‘Action’}();
}else{
die(‘找不到對(duì)應(yīng)的控制器!’);
}
?>
對(duì)應(yīng)的一個(gè)演示demo
/app/controller/testController.class.php(注意路徑)
<?
/**
* MVC演示demo
* 僅僅實(shí)現(xiàn)最基本的MVC功能,不包含安全處理,數(shù)據(jù)過(guò)濾,及其他優(yōu)化措施。
*/
class testController
{
function testAction(){
echo ‘Hello,World!’;
}
}
?>

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

以上是php mvc如何實(shí)現(xiàn)的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI