主要:
模型單例工廠
目錄結構優化
區分平臺(前臺,后臺....)
--------------:--------------------------------------├─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教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答