標籤:load 載入 系統 修改 代碼 相對 純粹 串連數 檔案上傳
MVC設計模式
MVC概念
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種商務邏輯、資料、介面顯示分離的方法組織代碼,將商務邏輯聚集到一個組件裡面,在改進和個人化定製介面及使用者互動的同時,不需要重新編寫商務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中。
MVC三大組件
模型
Model:模型
應用程式中用於處理應用程式資料邏輯的部分。
凡是跟資料操作有關的內容都屬於資料邏輯:只要與SQL指令有關,那麼都屬於模型(資料邏輯)
在MVC中:所有的SQL指令都應該存在於模型組件中。
視圖
View:視圖
應用程式中處理資料顯示的部分。
視圖:template(模板),用來承載資料的容器,通常是HTML檔案(顯示[HTML],美化[CSS]和效果[JavaScript])
控制器
Controller:控制器
應用程式中處理使用者互動的部分。
控制器:也叫作模組(Module),是用來與使用者直接接觸的指令碼代碼(瀏覽器直接提交給PHP的指令碼對象),判斷使用者操作的邏輯性。
控制器:在需要的時候,可以調用模型來進行資料處理(資料庫操作)
控制器:在需要的時候,可以調用視圖來進行資料顯示(加工美化)
MVC模式意義
MVC的本質是將代碼進行分離:顯示資料部分(View),處理業務部分(Controller)和資料操作部分(Model)
1、 符合人類分工協作的模式(思維模式)
2、 利於代碼的維護:前端(HTML)與後端(PHP)的分離
代碼發展史
1、 PHP與HTML嵌入到一起:混合開發階段
優點:效率高
缺點:代碼重用性低(不利於維護)
2、 PHP與HTML分離開來(兩個指令碼):模板技術
優點:前後端開發人員分離,利於代碼的維護
缺點:效率相對於混編較低,PHP後端代碼複用性比較低
3、 PHP中業務部分與資料操作部分再次分離:MVC思想
優點:代碼分離完整,利用代碼重複利用
缺點:伺服器要操作多個檔案完成一個請求(效率最低)
效率低:指的是相對於混編模式,從電腦的高效運作來說,再對比網路延遲,效率的降低對於使用者而言是感受不到。
MVC工作原理
PHP指令碼工作原理
瀏覽器—》發起請求—》伺服器PHP接收請求—》PHP處理(商務邏輯判斷,資料庫操作,顯示資料)--》返回給瀏覽器
MVC工作原理
在MVC設計思想中:至少有三個檔案才能服務一次請求(控制器,模型,視圖)
1、使用者通過瀏覽器發起請求
2、PHP接收請求:對應的指令碼必須是控制器指令碼
2.1 控制器判斷使用者是否操作恰當
2.2 控制器調用模型擷取資料
2.3 控制器調用視圖顯示資料(輸出)
3、PHP返回請求響應結果:控制器
MVC模式的工作流程
將MVC思想設計的項目,按照完整的請求走一遍
1、 使用者瀏覽器輸入URL:PHP指令碼(控制器)
2、 伺服器控制器指令碼接收請求
2.1 商務邏輯判斷
2.2 調用對應的模型:一個模型負責一張表對應的所有SQL操作
2.2.1 模型需要公用代碼
面向過程:封裝公用函數
物件導向:用類來封裝公用代碼(串連認證):模型繼承公用模型
2.2.2 模型封裝每一種資料邏輯:一個邏輯一個方法
2.3 控制器拿到資料(校正)
2.4 控制器載入模板(視圖)來顯示資料:顯示的過程就是輸出
3、 返回結果給使用者
項目單一入口實現
項目單一入口:一個項目只有一個入口(使用者唯一可以通過瀏覽器進行訪問的檔案)
1、 一個項目只要定義一個入口檔案:index.php/admin.php/home.php
所有的使用者都只能允許訪問index.php
2、 “入口檔案”來決定去訪問對應的哪個控制器
進行很多的判斷(系統初始化):單獨成立一個檔案
入口檔案:載入並運行初始設定檔案
3、 初始設定檔案中來決定訪問哪個對應的控制器
3.1 字元集設定
3.2 常量設定(目錄)
3.3 系統設定
3.4 自動載入設定
3.5 初始化URL(從“URL”中擷取資料):控制器和控制器類中的具體方法
3.6 載入設定檔
3.7 分發控制器
4、 控制器處理MVC工作流程
4.1 商務邏輯判斷
4.2 調用模型操作資料庫
4.3 調用視圖顯示資料
5、 結果最終是一層層返回
Index.php->初始設定檔案->控制器->模型和視圖
模型和視圖->控制器->初始設定檔案->index.php->返回瀏覽器
建立目錄結構
規劃架構目錄
網站根目錄下:應該有哪些對應的檔案夾和檔案
1、 入口檔案:index.php
2、 應用程式目錄:App檔案夾,存放與當前應用有關的內容(MVC對應的檔案)
3、 核心目錄:Core檔案夾,存放一些核心檔案的(初始化,公用核心檔案)
4、 Web資來源目錄:Public檔案夾,存放的就是當前應用所需要的一些資源(樣式、JS和圖片等)
5、 外掛程式目錄:Vendor檔案夾,存放的是一些外部提供好的完整功能的指令碼(Smarty,驗證碼,圖片上傳等)
6、 配置目錄:Config檔案夾,存放設定檔(有可能內部再分層)
7、 檔案上傳目錄:Upload檔案夾,存放使用者上傳的檔案
規劃應用程式目錄
應用程式目錄:MVC對應的檔案的儲存
通常:一個網站分為前台和後台
1、 建立兩個對應的檔案夾,分離前後台業務:Home/Back,Home/Admin
2、 對應的前後台之下,都會有對應的MVC,在對應的檔案夾下,再次建立分層檔案夾Controller/Model/View
注意:很多時候,前後台業務不一樣,但是資料操作基本差不多,基於這種情況,會將Model檔案夾提升,在App目錄下,與對應的前後台檔案夾同級
規劃Web資來源目錄
Web資來源目錄:管理對應的樣式,圖片和js效果,在Public目錄下,建立三個對應的檔案夾即可。
入口檔案
入口檔案:index.php,本質要做的事情非常簡單
1、 實現入口設定:安全限定(只有訪問index.php入口檔案才有可能訪問其他檔案夾中的資源)
原理:在入口處定義一個常量,然後在其他檔案中判斷常量是否存在:存在即可訪問,不存在不允許訪問。
2、 引入系統初始設定檔案
3、 讓系統初始設定檔案執行
搭建運行環境
1、 搭建一個虛擬機器主機
2、 重啟apache
3、 修改本機Hosts檔案
應用程式初始化類檔案
要求
1、 檔案需要使用命名空間(所有類檔案)
2、 檔案需要許可權判定(所有類檔案)
3、 一個功能應該是一個單獨的方法
1、 run方法:運行方法
2、 初始化字元集:initCharset
3、 初始化目錄常量:initDirConst
4、 初始化系統設定:initSystem
控制對應的錯誤顯示層級,以及是否顯示
Ini_set(選項,值)
5、 初始化設定檔:initConfig
6、 初始化URL:initURL
7、 初始化自動載入:initAutoload
7.1 載入方式自訂:Core/Controller/Model/Vendor
7.2 利用spl_autoload_resiter來進行自動載入
7.3 所有的類都是由命名空間控制的:系統尋找類的時候會帶著空間尋找(不是一個純粹的類名):在載入的時候,一定要去除空間
8、 分發控制器
控制器組件
功能:商務邏輯處理,調用模型擷取資料,調用視圖顯示資料
控制器調用模型
控制器調用視圖顯示資料
模型組件
模型:串連資料庫,進行SQL操作,資料解析
建立模型:一張表(資料)對應一個模型
模型要做的事情:串連認證(?),組織SQL指令,執行SQL指令,解析SQL執行結果
視圖組件
視圖:本質就是顯示資料(已有資料)
增加視圖檔案
在視圖中解析資料
MVC第一課