国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php源碼之區分平臺MVC結構的介紹

2020-03-22 18:02:29
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于php源碼區分平臺MVC結構的介紹,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

主要:

模型單例工廠

目錄結構優化

區分平臺(前臺,后臺....)

--------------:--------------------------------------├─App│ ├─Model 模型│ │ └─UserModel.html' target='_blank'>class.php 用戶模型類 │ ├─View 視圖│ │ ├─Back后臺│ │ │ └─Index│ │ │ └─index.html 后臺首頁面│ │ └─Home前臺│ │ └─User 用戶視圖目錄│ │ └─login.html 登錄表單頁面│ ├─Controller 控制器│ │ ├─Back后臺│ │ │ └─IndexController.class.php 后臺首頁控制器│ │ └─Home前臺│ │ └─UserController.class.php 用戶控制器├─Public 靜態公共文件(js,css,images)│ ├─Plugins 插件│ │ └─layui 前端框架插件│ ├─Back后臺│ │ ├─js/ js文件│ │ ├─css/ css樣式文件│ │ └─image img圖片 │ └─Home前臺│ ├─js/ js文件│ ├─css/ css樣式文件│ └─image img圖片 ├─Frame 公共使用的類│ ├─BaseModel.class.php 數據庫連接類│ ├─BaseController.class.php 控制器公共操作(設置編碼,信息跳轉)│ ├─FactoryModel.class.php 模型工廠類│ └─MySQLDB.class.php 數據庫操作工具類└─index.php 入口文件----------------------------------------------------------------

下載查看該項目源碼: http://gitee.com/NewbiesYang/young_blog

模型單例工廠

準備: 創建分支

1 $ git checkout master2 $ git checkout -b folder-model-app 

說明:

1)程序中3行 。。。 表示省略的代碼。從前面或源碼中可查看

2) 【XXX/XXX】表示項目文件相對路徑

思路:

問題: 項目中模型操作數據表,一個動作可能就要操作一次數據庫,一次請求多個動作,每個動作都需要去實例化對應模型

解決想法: 創建一個模型類單例工廠
實現: 創建單例的模型類 FactoryModel.class.php
屬性$model=array(); 存儲模型類實例
方法: M($cmodelName, array $conf=null) 實例化模型類
使用: 控制器中使用模型類實例:$model=FactoryModel::M( 模型名稱 )

代碼實現

1) 創建模型單例工廠 【Frame/FactoryModel.class.php】

 1 ?php  2 /**  3 * 單例模型工廠類  4 * User: young  5 */  7 class FactoryModel  8 {  9 protected static $model = array(); //存儲模型類實例 11 /** 12 * 構造方法 13 */ 14 protected function __construct() 15 { 16 } 18 /* 19 * 傳遞一個模型類的類名,就返回該類的一個單例實例對象 20 *@param string $modelName 模型類的類名 21 *@param array $conf 數據庫配置信息 22 *@return object 傳入模型類的實例(單例) 23 */ 24 public static function M($modelName, array $conf=null) 25 { 26 $modelName = $modelName. Model  27 if(empty(static::$model[$modelName]) || !(static::$model[$modelName] instanceof $modelName)){ 28 static::$model[$modelName] = new $modelName($conf); 29 } 30 return static::$model[$modelName]; 31 } 32 }

2) 引入該類文件 【index.php】

 1 ?php  2 /**  3 * 入口文件  4 */  5 require_once Frame/Db.class.php //數據庫操作類  6 require_once Frame/BaseModel.class.php //基礎模型類  7 require_once( Model/UserModel.class.php  9 require_once Frame/FactoryModel.class.php //模型工廠類 10 。。。 11 。。。 12 。。。

入口文件引入工廠模型類

3) 應用: 控制器中使用,如用戶控制器UserController中 登錄操作【Controller/UserController.class.php】

 1 ?php  2 /**  3 * UserController.class.php 用戶控制器  4 */  6 class UserController extends BaseController{  7 。。。  8 。。。  9 。。。 11 /** 12 * 登錄操作: 校驗登錄信息 13 */ 14 public function dlogin() 15 { 16 //接收登錄信息17 $data = array(); 18 $data[ username ] = trim($_POST[ username  19 $data[ pwd ] = trim($_POST[ pwd  21 //實例化模型,調用模型方法 22 //$model = new UserModel(); 23 //$result = $model- checkLoginInfo($data); 24 //替換上面兩行 25 $result = FactoryModel::M( User )- checkLoginInfo($data); 27 //跳轉提示 28 if($result){ 29 $this- msg( 登錄成功! , ?a=index ,3); 30 } else { 31 $this- msg( 用戶名或密碼不正確!!  32 } 33 } 34 }

4) 測試程序運行,http://www.test.com/blog/index.php 登錄測試結果與前面一致。暫時先提交代碼

1 git add -2 git commit -m 完成模型工廠類 
目錄結構優化 思路

多個平臺(模塊):前后,后臺
MVC結構分平臺
C: Controllers/Home Controllers/Admin .....
V: Views/Home Views/Admin .....
M: 操作數據表一般模塊共用
公共資源目錄Public: Public/Home Public/Admin .....
目錄結構變化,所有載入類,視圖的路徑做相應變化

代碼實現

1)操作步驟

1)目錄構建: step 1: 根目錄下創建目錄App, 將Model目錄,View目錄,Controller目錄放大App目錄下 既根目錄只有: App/ Public/ Frame/ index.phpstep 2: 在Controller目錄中,創建Back目錄和Home目錄。將UserController控制器類文件放入Home目錄中step 3: 在View目錄中,創建Back目錄和Home目錄。將login.html文件放入Home目錄中step 4: 在Public目錄中,創建Back目錄,Home目錄,Plugins目錄。將js,images,css目錄放入Home目錄中,公共插件放入對應的Plugins目錄中2)文件引入修改:step 5: index.php入口文件對UserCotroller類的引入路徑修改step 6:UserController類中對視圖login.html的include路徑的修改step 7: 視圖login.html中對css和js路徑的引入

操作步驟思路

2) 具體代碼修改操作

入口文件引入類路徑修改【index.php】 主要是用戶模型類和用戶控制器類路徑引入修改

 1 ?php  2 /**  3 * 入口文件  4 */  5 require_once Frame/Db.class.php //數據庫操作類  6 require_once Frame/BaseModel.class.php //基礎模型類  7 require_once App/Model/UserModel.class.php  9 require_once Frame/FactoryModel.class.php //模型工廠類 11 require_once Frame/BaseController.class.php //基礎控制器類 12 require_once App/Controller/Home/UserController.class.php  14 //實例化控制器 15 $userCtr = new UserController(); 17 $a = !empty($_GET[ a ]) ? $_GET[ a ] : login  19 $userCtr - $a();

入口文件引入類的修改

用戶控制器類對登錄表單視圖路徑引入的修改 【App/Controller/Home/UserController.class.php】

 1 ?php  2 /**  3 * UserController.class.php 用戶控制器  4 */  6 class UserController extends BaseController{  7 /**  8 * 展示登錄界面  9 * @access public10 */ 11 public function login() 12 { 13 include App/View/Home/User/login.html  14 } 15 。。。 16 。。。 17 。。。

用戶控制器展示登錄界面修改

登錄表單視圖 【App/View/Home/User/login.html】 對靜態資源路徑的修改

 1 !DOCTYPE html  2 html lang= zh-CN  3 head  4 meta charset= UTF-8  5 title 登錄 /title  6 link rel= stylesheet type= text/css href= public/plugins/layui/css/layui.css  7 link rel= stylesheet type= text/css href= public/Home/css/style.css  8 /head  9 。。。 10 。。。 11 。。。 12 script type= text/javascript src= public/plugins/layui/layui.js /script  13 script  14 layui.use( form , function(){ 15 var form = layui.form; 16 }); 17 /script  18 /body  19 /html 

登錄表單視圖

效果及提交代碼

提交保存代碼

1 git add -A2 git commit -m 目錄結構優化 
區分平臺(前臺,后臺....) 思路

實現根據平臺的不同進行不同的操作

用戶點擊頁面請求,隨著url發送3個參數: p=平臺 c=控制器 a=動作
入口文件接收get數據就可以知道: 平臺, 控制器, 動作

代碼實現

1) 操作步驟:

1)入口文件平臺區分: step 1: 入口-登錄頁面提交的action= ?p=Home c=User a=dlogin  step 2: 入口文件index.php 接收$_GET step 3: 登錄判斷成功跳轉地址: $this- msg( 登錄成功! , ?p=Admin c=Index a=index ,3);2) 后臺首頁: step 1: 靜態css,js,img文件放置 Public/Admin/ step 2: 創建后臺首頁控制器類, index() 載入后臺首頁視圖文件 step 3: View/Admin/Index/index.html 修正css等靜態文件路

操作步驟思路

2)登錄表單提交action=“?p=Home c=User a=dlogin” 【App/View/Home/User/login.html】

 1 !DOCTYPE html  2 html lang= zh-CN  3 head  4 meta charset= UTF-8  5 title 登錄 /title  6 link rel= stylesheet type= text/css href= public/plugins/layui/css/layui.css  7 link rel= stylesheet type= text/css href= public/Home/css/style.css  8 /head  9 body  10 p >

登錄表單form提交action修改

3) 入口文件區分平臺 【index.php】

 ?php * 入口文件  $p = !empty($_GET[ p ]) ? $_GET[ p ] : Home //平臺 $c = !empty($_GET[ c ]) ? $_GET[ c ] : User //控制器 $a = !empty($_GET[ a ]) ? $_GET[ a ] : login //動作 require_once Frame/Db.class.php //數據庫操作類 require_once Frame/BaseModel.class.php //基礎模型類 require_once App/Model/UserModel.class.php  require_once Frame/FactoryModel.class.php //模型工廠類 require_once Frame/BaseController.class.php //基礎控制器類 require_once App/Controller/ .$p. / .$c. Controller.class.php  $ctr = $c. Controller //實例化控制器 $userCtr = new $ctr();$userCtr - $a();

用戶控制器登錄操作,登錄成功跳轉到后臺首頁 【App/Controller/Home/UserController.class.php】

 1 ?php  2 /**  3 * UserController.class.php 用戶控制器  4 */  6 class UserController extends BaseController{  7 。。。  8 。。。  9 。。。 10 /** 11 * 登錄操作: 校驗登錄信息 12 */ 13 public function dlogin() 14 { 15 //接收登錄信息 16 $data = array(); 17 $data[ username ] = trim($_POST[ username 18 $data[ pwd ] = trim($_POST[ pwd  20 //實例化模型,調用模型方法 21 $result = FactoryModel::M( User )- checkLoginInfo($data); 23 //跳轉提示 24 if($result){25 $this- msg( 登錄成功! , ?p=Admin c=Index a=index ,3);26 } else { 27 $this- msg( 用戶名或密碼不正確!!  28 } 29 } 30 }

登錄操作成功后跳轉路徑修改

測試

1)模板準備:

準備后臺視圖模板程序。可以自己寫前端視圖模板程序,也可以到網上下載別人寫好的前端模板,如到 模板之家 選擇所需求的 前臺,后臺模板

尋找模板: www.mycodes.net

2) 將后臺模板視圖的靜態資源文件(如 js, css,image)拷貝到 【Public/admin/】目錄下

3) 創建后臺首頁控制器 【App/Controller/Admin/IndexController.class.php】

 1 ?php  2 /**  3 * IndexController控制器類  4 * 后臺相關操作  5 * User: young  6 */  8 class IndexController extends BaseController  10 //展示后臺首頁 11 public function index() 12 { 13 include App/View/Admin/Index/index.html  14 } 15 }

4) 創建后臺首頁視圖 【App/View/Admin/Index/index.html】

 1 !doctype html  2 html  3 head  4 meta charset= UTF-8  5 title 后臺管理 /title  6 link rel= stylesheet type= text/css href= ./Public/Admin/css/common.css /  7 link rel= stylesheet type= text/css href= ./Public/Admin/css/main.css /  8 script type= text/javascript src= ./Public/Admin/js/libs/modernizr.min.js /script  9 script type= text/javascript src= ./Public//home/js/jquery1.42.min.js /script  10 /head  11 body  14 p >

后臺首頁視圖

效果及提交代碼

代碼提交,推送

1 $ git add -A2 $ git commit -m 區分平臺,實現后臺首頁 3 $ git checkout master4 $ git merge folder-model-app 5 $ git push origin master

小結: 根據平臺進一步優化目錄結構,制作模型的單例工廠,實現后臺首頁

提出問題

1. 項目中可以看到 include或require的文件路徑很長,容易出錯,也不便于使用 == 如何更加簡單引入且不易出錯

2. 寫一個類,就要到入口文件引入一次, 比較麻煩 == 如何實現自動加載類

3. 隨著類的引入增加,入口文件代碼量會越來越大 == 如何 封裝,簡化入口文件

4. 現在項目中任何一個目錄,都可以隨意訪問 == 如何加強安全訪問,限制目錄的訪問

下一步:常量使用,自動加載類實現,入口封裝,限制目錄訪問

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

php源碼之搭建站點實現登錄頁面的方法

php源碼之實現單入口MVC結構的方法

以上就是php源碼之區分平臺MVC結構的介紹的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 改则县| 唐海县| 营口市| 格尔木市| 北碚区| 屯门区| 抚顺市| 红河县| 高清| 凤凰县| 弥勒县| 当雄县| 天等县| 岚皋县| 越西县| 烟台市| 屯昌县| 友谊县| 织金县| 巴南区| 德钦县| 宁海县| 齐齐哈尔市| 玉环县| 丰县| 安宁市| 托克逊县| 淮北市| 赤城县| 靖安县| 郴州市| 新疆| 大埔县| 商丘市| 南乐县| 盐边县| 炉霍县| 竹北市| 清流县| 龙口市| 张家口市|