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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
PHP sprintf()函数用例解析
May 18 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
php日历制作代码分享
Jan 20 PHP
js代码实现微博导航栏
Jul 30 PHP
php猜单词游戏
Sep 29 PHP
PHP读取PPT文件的方法
Dec 10 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
为何说PHP引用是个坑,要慎用
Apr 02 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
Python实现类继承实例
2014/07/04 Python
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
商务英语专业应届毕业生求职信
2013/10/28 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
空气的环保标语
2014/06/12 职场文书
小学家长学校培训材料
2014/08/24 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
公务员处分决定书
2015/06/25 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python