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实现选择排序的解决方法
May 04 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
Laravel 5 学习笔记
Mar 06 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
PHP简单实现无限级分类的方法
May 13 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
php分页查询mysql结果的base64处理方法示例
May 18 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 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设计模式之单例模式实例分析
2015/02/25 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
Python实现识别手写数字大纲
2018/01/29 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
python归并排序算法过程实例讲解
2020/11/04 Python
python asyncio 协程库的使用
2021/01/21 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
德国家用电器购物网站:Premiumshop24
2019/08/22 全球购物
咖啡店自主创业商业计划书
2014/01/22 职场文书
捐助倡议书
2015/01/19 职场文书
超市督导岗位职责
2015/04/10 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
go 实现简易端口扫描的示例
2021/05/22 Golang
Python如何加载模型并查看网络
2022/07/15 Python