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下实现折线图效果的代码
Apr 28 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
Feb 14 PHP
thinkphp 多表 事务详解
Jun 17 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
Jul 01 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
Nov 09 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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实现MySQL读写分离操作示例
2014/06/25 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
2017/01/17 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
utf8的编码算法 转载
2006/12/27 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
js鼠标移动时禁止选中文字
2017/02/19 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
python self,cls,decorator的理解
2009/07/13 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
使用python画社交网络图实例代码
2019/07/10 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
《植物妈妈有办法》教学反思
2014/02/25 职场文书
教职工代表大会主持词
2014/04/01 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2014年德育工作总结
2014/11/20 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
小学思品教学反思
2016/02/20 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android