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 09 PHP
使用eAccelerator加密PHP程序
Oct 03 PHP
php 判断数组是几维数组
Mar 20 PHP
php发送post请求函数分享
Mar 06 PHP
php导入模块文件分享
Mar 17 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
PHP生成随机密码方法汇总
Aug 27 PHP
php set_include_path函数设置 include_path 配置选项
Oct 30 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
PHP数据库操作四:mongodb用法分析
Aug 16 PHP
PHP与以太坊交互详解
Aug 24 PHP
php 函数中静态变量使用的问题实例分析
Mar 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
php 移除数组重复元素的一点说明
2008/11/27 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
javascript 写类方式之三
2009/07/05 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
python实现邮件自动发送
2019/08/10 Python
python数组循环处理方法
2019/08/26 Python
Django和Flask框架优缺点对比
2019/10/24 Python
is_file和file_exists效率比较
2021/03/14 PHP
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
人事行政主管岗位职责
2013/12/22 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
《火烧云》教学反思
2014/04/12 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
奖金申请报告模板
2015/05/15 职场文书
老兵退伍感言
2015/08/03 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
MySQL 时间类型的选择
2021/06/05 MySQL
sass 常用备忘案例详解
2021/09/15 HTML / CSS
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python