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面试题附答案
Jan 07 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
php中explode的负数limit用法分析
Feb 27 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP new static 和 new self详解
Feb 19 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 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
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
python 带时区的日期格式化操作
2020/10/23 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
十一个高级MySql面试题
2014/10/06 面试题
小学班长竞选演讲稿
2014/04/24 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
庆六一活动总结
2014/08/29 职场文书
无房证明样本
2015/06/17 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js