CI框架实现框架前后端分离的方法详解


Posted in PHP onDecember 30, 2016

本文实例分析了CI框架实现框架前后端分离的方法。分享给大家供大家参考,具体如下:

我们在使用CI框架开发中(或者使用所有的其他框架开发中),总是习惯于将所开发项目的前端和后台分离开来,将各自的控制器、模型或视图放到不同的文件夹中。在这一点上ThinkPHP框架要比CI框架更要方便一些。这篇博文我们就讲述如何实现根据CI框架开发将前后端实现分离。(本文以本人开发的Pkadmin后台管理系统为例,Pkadmin后台管理系统是基于Codeigniter_v3.1.0框架和Olive Admin后台模版进行开发的,在这里就不过多的介绍,感情趣的朋友可以到Github进行查看欢迎大家指正相互学习。

Github地址:https://github.com/zhihua-wei/Pkadmin)

1、建立合理的目录结构

CI框架的目录结构以及各目录的功能相信大家都已经很了解了,在这里就不在重复的进行介绍了(如果还有不是很明白的可以去看博主的博客专栏)。我们要实现前后端框架功能分离,首先就要建立合理的目录结构,也就是你想将你的前端控制器放在何处、后台控制器放在何处、前端视图放在那个文件夹、后台管理视图放在那个文件夹。

CI框架实现框架前后端分离的方法详解

如上图是Pkadmin后台管理系统的目录结构,我将控制器全部放在框架本身的controllers文件夹中,只添加了不同的前端后台文件夹存放各自的控制器文件,视图也是同样。不做赘述。

2、扩展加载器设置视图路径

① 为了项目有更好的维护性,我把视图路径设置为常量,在App/config/constants.php中进行定义常量:

//定义前台视图路径常量
define('HOME_VIEW_DIR', 'views/Home/');
//定义后台视图路径常量
define('ADMIN_VIEW_DIR', 'views/Pkadmin/');
//版本
define('PKADMIN_VERSION', '1.0.0');

② 扩展加载器

加载器如何扩展如果有博友不会的可以去查看CI框架手册,上面讲的非常清楚。(多说一句:在APP/core文件夹下创建PK_Loader.php文件)

<?php
/**
 * ==========================================
 * Created by Pocket Knife Technology.
 * Author: ZhiHua_W <zhihua_wei@foxmail.com>
 * 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、扩展控制器

扩展控制器主要是为了生成前台后台的父控制器方便与进行操作继承(为了方便可以很快明白其原理,代码有所精简)。

<?php
/**
 * ==========================================
 * Created by Pocket Knife Technology.
 * Author: ZhiHua_W <zhihua_wei@foxmail.com>
 * 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(后台首页)控制器文件进行输出测试(代码有所删除精简)。

<?php
/**
 * ==========================================
 * Created by Pocket Knife Technology.
 * Author: ZhiHua_W <zhihua_wei@foxmail.com>
 * 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程序设计有所帮助。

PHP 相关文章推荐
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
PHP的error_reporting错误级别变量对照表
Jul 08 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
php实现简单文件下载的方法
Jan 30 PHP
微信公众平台实现获取用户OpenID的方法
Apr 15 PHP
PHP常用技巧汇总
Mar 04 PHP
PHP的全局错误处理详解
Apr 25 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
PHP读取Excel类文件
May 15 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
php mysql实现mysql_select_db选择数据库
Dec 30 #PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 #PHP
微信公众号模板消息群发php代码示例
Dec 29 #PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 #PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 #PHP
PHP实现的XML操作类【XML Library】
Dec 29 #PHP
php常用字符函数实例小结
Dec 29 #PHP
You might like
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
python实现简单坦克大战
2020/03/27 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
群胜软件Java笔试题
2012/09/29 面试题
幼儿园运动会加油词
2014/02/14 职场文书
机关会计岗位职责
2014/04/08 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
消防宣传口号
2014/06/16 职场文书
房屋维修申请报告
2015/05/18 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
导游词之广西漓江
2019/11/02 职场文书
利用python进行数据加载
2021/06/20 Python