PHP實例學習之————MVC架構模式分析與設計


 

寫博客,不容易,你們的評論和轉載,就是我的動力,

但請注明出處,隔壁老王的開發園:http://www.cnblogs.com/titibili

2016年1月31日 18:53 作者:Ygirl

wpsE9CA.tmp

Model(模型) View(視圖) Controller(控制器)

以前大部分應用程序通過過程化模式創建

wpsE9DB.tmp

然而,代碼混疊

wpsE9DC.tmp

MVC優勢:

wpsE9EC.tmp

MVC開發環境:

編輯器:  EmEditor

Php環境:運用WampServe集成軟件安裝配置而成

下載地址:http://www.wampserver.com/en/

實例一

形如下列文件命名:

wpsE9ED.tmp

一 創建第一個控制器文件:

1.A另存為文件,窗口下方更改換行方式為僅LF(UNIX)(基於LF開發),更改編碼方式為UTF-8無簽名。

wpsE9EE.tmp

2.a.創建類(用class關鍵字)

b. 通過控制器發出show()指令

wpsE9EF.tmp

二 創建第一個模型文件(方法形同創建控制器文件,鍵入以下代碼)

wpsE9F0.tmp

三 創建第一個視圖文件(方法形同創建控制器文件,鍵入以下代碼)

wpsEA01.tmp

MVC運行流程

1瀏覽者: 調用控制器,發出指令

2.控制器: 按指令選取一個合適的模型

3,.模型:   按控制器指令取相應數據

4.控制器: 按指令選取相應視圖

5.視圖:   把步驟3取到的數據按用戶需求顯示

四 新創建一個test.php文件

MVC運行流程

1瀏覽者: 調用控制器,發出指令

2.控制器: 按指令選取一個合適的模型

3,.模型:   按控制器指令取相應數據

4.控制器: 按指令選取相應視圖

5.視圖:   把步驟3取到的數據按用戶需求顯示

a使用require_once()引入上面創建的三個文件

b實例化控制器文件(使用new創建名為testController的對象,並賦值給一個變量,即創建了控制器)

c執行控制器里面的方法

以下完成了MVC運行流程的第一步

wpsEA11.tmp

再回到控制器文件,(按照MVC運行流程依次執行)

a. 控制器選取模型   $testModel=new testModel();

b,.模型取得相應數據 $data=$testModel->get();(將方法取得的數據賦值給data變量)

c.控制器選取視圖    $testView=new testView();

d.顯示數據          $testView->display($data);

wpsEA12.tmp

配置測試網址

測試結果:

wpsEA13.tmp

總結:

控制器的作用是調用模型,並調用視圖,將模型產生的數據傳遞給視圖,並讓相關視圖去顯示。

模型的作用是獲取數據並處理返回的數據。

視圖的作用是將取得的數據進行組織、美化,並最終向用戶終端輸出。

目錄規范參考:

wpsEA14.tmp

入口程序:又稱單一入口機制,指在一個Web應用程序中,所有請求都是指向一個腳本文件(如某一網站頁面都是index.php?XXXX形式)所有對使用程序的訪問都必須通過這個入口。

好處:訪問限制只需限制一個文件;

  使得MVC得以實現。

(多個控制器,若每個程序都對每個控制器進行實例化,進行調用,再使用控制器的方法,會使得一個網站會使用很多的訪問文件去實例化,維護麻煩;相反,使用單一index.php去調用控制器,再讓控制器去調用M、V模塊,維護起來方便。)

實例二

建立一個控制器調用函數C

//多個控制器,里面包含多種方法,給定不同參數去調用某個控制器、方法即可。

function C($name, $method){

require_once('/libs/Controller/'.$name.'Controller.class.php');//引入控制器文件

//$testController=new testController();實例化

//$testController->show();使用方法

eval('$obj = new '.$name.'Controller();$obj->'.$method.'();');//eval()將字符轉化為可執行的php語句;$testController替換為$obj, test替換為’.name.’

}

建立一個模型調用函數M

//模型的方法自帶參數,不封裝使用起來更為靈活;控制器隨引用方法,但不允許有自己的參數

function M($name){

require_once('/libs/Model/'.$name.'Model.class.php');

eval('$obj = new '.$name.'Model();');

return $obj;//返回實例化產生的對象

}

建立一個視圖調用函數V

function V($name){

require_once('/libs/View/'.$name.'View.class.php');

eval('$obj = new '.$name.'View();');

return $obj;

}

創建一個入口文件index.php

a. 統一入口文件為首的url格式(如index.php?controller=控制器名&method=方法名)

b. 在入口文件里使用安全的方式接收傳遞來的控制器名和方法名

wpsEA25.tmp

其中使用的daddslashes()函數,在function.php中定義

//對非法字符進行轉義,因為要對GET()方法的取得進行過濾

function daddslashes($str){

//addslashes()對單引號等特殊字符進行轉義

//判斷當前打開狀態,打開時返回true,並自動進行轉義,沒有打開則使用addslashes()

return (!get_magic_quotes_gpc())?addslashes($str):$str;

}

function.php文件如下:

wpsEA26.tmp

testController.class.php文件修改為:

wpsEA37.tmp

配置測試網址(url形式 index.php?controller=控制器名&method=方法名)

測試結果:

wpsEA47.tmp

安裝WampServe

下載地址:http://www.wampserver.com/en/

安裝完在瀏覽器上鍵入localhost進行測試

打開WS,左鍵單擊右窗口下方的圖標,啟動所有服務;右鍵圖標,可進行語言設置。

www目錄是WS默認的存放網頁文件夾

自定義網站根目錄:

更改目錄:單擊Apache—httpd.conf,ctrl+F進入查找,輸入documentroot,找到原先的存放目錄,更改為(如E;/Demo),在下拉文件,找到另一處相同目錄,同樣更改為(如E;/Demo)

左鍵單擊WS圖標重新啟動所有服務

寫入一個php文件到新指定的存放目錄底下,localhost/php文件夾名,測試出來結果即成功更改網頁文件夾存放目錄

WS多站點配置:

WS—wamp—bin—apache—apache2.4.9—conf—extra—httpd.vhost

<VirtualHost *:80>

    ServerAdmin webmaster@dummy-host2.example.com

    DocumentRoot "c:/Apache24/docs/dummy-host2.example.com"

    ServerName dummy-host2.example.com

    ErrorLog "logs/dummy-host2.example.com-error.log"

    CustomLog "logs/dummy-host2.example.com-access.log" common

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "F:/wamp/www/Demo/test01"

    ServerName test01.com

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "F:/wamp/www/Demo/test02"

    ServerName test02.com

</VirtualHost>

/*************************Finish!***************************/

寫博客,不容易,你們的評論和轉載,就是我的動力,

但請注明出處,隔壁老王的開發園:http://www.cnblogs.com/titibili

真心感謝!~

(更多精彩,微信關注公眾號:猿帶馬)

wpsEA48.tmp


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM