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的类树(支持无限分类)
Oct 09 PHP
聊天室php&amp;mysql(二)
Oct 09 PHP
第十三节--对象串行化
Nov 16 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
php的一个简单加密解密代码
Jan 14 PHP
php实现计数器方法小结
Jan 05 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
php fread函数使用方法总结
May 28 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 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获取随机数字和字母的方法详解
2013/06/06 PHP
初识Laravel
2014/10/30 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
php json相关函数用法示例
2017/03/28 PHP
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
JSON相关知识汇总
2015/07/03 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
jQuery插件版本冲突的处理方法分析
2017/01/16 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
Vue前端项目部署IIS的实现
2020/01/06 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python中编写ORM框架的入门指引
2015/04/29 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
配件采购员岗位职责
2013/12/03 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
校庆活动策划方案
2014/06/05 职场文书
比赛口号大全
2014/06/10 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis