本文實例分析了CI框架實現框架前后端分離的方法。分享給大家供大家參考,具體如下:
我們在使用CI框架開發中(或者使用所有的其他框架開發中),總是習慣于將所開發項目的前端和后臺分離開來,將各自的控制器、模型或視圖放到不同的文件夾中。在這一點上ThinkPHP框架要比CI框架更要方便一些。這篇博文我們就講述如何實現根據CI框架開發將前后端實現分離。(本文以本人開發的Pkadmin后臺管理系統為例,Pkadmin后臺管理系統是基于Codeigniter_v3.1.0框架和Olive Admin后臺模版進行開發的,在這里就不過多的介紹,感情趣的朋友可以到Github進行查看歡迎大家指正相互學習。
Github地址:https://github.com/zhihua-wei/Pkadmin)
1、建立合理的目錄結構
CI框架的目錄結構以及各目錄的功能相信大家都已經很了解了,在這里就不在重復的進行介紹了(如果還有不是很明白的可以去看博主的博客專欄)。我們要實現前后端框架功能分離,首先就要建立合理的目錄結構,也就是你想將你的前端控制器放在何處、后臺控制器放在何處、前端視圖放在那個文件夾、后臺管理視圖放在那個文件夾。
如上圖是Pkadmin后臺管理系統的目錄結構,我將控制器全部放在框架本身的controllers文件夾中,只添加了不同的前端后臺文件夾存放各自的控制器文件,視圖也是同樣。不做贅述。
2、擴展加載器設置視圖路徑
① 為了項目有更好的維護性,我把視圖路徑設置為常量,在App/config/constants.php中進行定義常量:
1
2
3
4
5
6
|
//定義前臺視圖路徑常量 define( 'HOME_VIEW_DIR' , 'views/Home/' ); //定義后臺視圖路徑常量 define( 'ADMIN_VIEW_DIR' , 'views/Pkadmin/' ); //版本 define( 'PKADMIN_VERSION' , '1.0.0' ); |
② 擴展加載器
加載器如何擴展如果有博友不會的可以去查看CI框架手冊,上面講的非常清楚。(多說一句:在APP/core文件夾下創建PK_Loader.php文件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?php /** * ========================================== * Created by Pocket Knife Technology. * Author: ZhiHua_W <[email protected]> * Date: 2016/11/02 0031 * Time: 上午 9:19 * Project: Pkadmin后臺管理系統 * Version: 1.0.0 * Power: 加載器擴展 * ========================================== */ defined( 'BASEPATH' ) OR exit ( 'No direct script access allowed' ); class PK_Loader extends CI_Loader { /** * 設置前臺視圖路徑 */ public function set_home_view_dir() { $this -> _ci_view_paths = array (APPPATH . HOME_VIEW_DIR => TRUE); } /** * 設置后臺視圖路徑 */ public function set_admin_view_dir() { $this -> _ci_view_paths = array (APPPATH . ADMIN_VIEW_DIR => TRUE); } } |
3、擴展控制器
擴展控制器主要是為了生成前臺后臺的父控制器方便與進行操作繼承(為了方便可以很快明白其原理,代碼有所精簡)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?php /** * ========================================== * Created by Pocket Knife Technology. * Author: ZhiHua_W <[email protected]> * Date: 2016/11/02 0031 * Time: 上午 9:23 * Project: Pkadmin后臺管理系統 * Version: 1.0.0 * Power: 控制器擴展 * ========================================== */ defined( 'BASEPATH' ) OR exit ( 'No direct script access allowed' ); /** * 前臺父控制器 */ class Home_Controller extends CI_Controller { public function __construct() { parent::__construct(); $this -> load -> set_home_view_dir(); } } /** * 后臺父類控制器 */ class Pkadmin_Controller extends CI_Controller { public $data ; public function __construct() { parent::__construct(); $this -> load -> set_admin_view_dir(); } } |
4、測試
在Pkadmin控制器文件夾中新建Admin.php(后臺首頁)控制器文件進行輸出測試(代碼有所刪除精簡)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?php /** * ========================================== * Created by Pocket Knife Technology. * Author: ZhiHua_W <[email protected]> * Date: 2016/11/05 0015 * Time: 上午 10:23 * Project: Pkadmin后臺管理系統 * Version: 1.0.0 * Power: 后臺主頁控制器 * ========================================== */ defined( 'BASEPATH' ) OR exit ( 'No direct script access allowed' ); class Admin extends Pkadmin_Controller { public function __construct() { parent::__construct(); $this -> load -> model( 'login_model' , 'admin' ); $this -> load -> library( 'pagination' ); } /** * Pkadmin 后臺首頁action */ public function index() { $this -> load -> view( 'admin.html' , $data ); } } |
后臺控制器繼承后臺父類控制器,前臺控制器集成前臺父類控制器,同樣的在各自視圖文件夾中建立相應的視圖文件即可是想前后端的完美分離。
希望本文所述對大家基于CodeIgniter框架的PHP程序設計有所幫助。