CI框架实现框架前后端分离的方法详解

发布时间 - 2026-01-10 22:13:19    点击率:

本文实例分析了CI框架实现框架前后端分离的方法。分享给大家供大家参考,具体如下:

我们在使用CI框架开发中(或者使用所有的其他框架开发中),总是习惯于将所开发项目的前端和后台分离开来,将各自的控制器、模型或视图放到不同的文件夹中。在这一点上ThinkPHP框架要比CI框架更要方便一些。这篇博文我们就讲述如何实现根据CI框架开发将前后端实现分离。(本文以本人开发的Pkadmin后台管理系统为例,Pkadmin后台管理系统是基于Codeigniter_v3.1.0框架和Olive Admin后台模版进行开发的,在这里就不过多的介绍,感情趣的朋友可以到Github进行查看欢迎大家指正相互学习。

Github地址:https://github.com/zhihua-wei/Pkadmin)

1、建立合理的目录结构

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相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。


# CI框架  # 前后端  # 分离  # CI框架入门示例之数据库取数据完整实现方法  # php ci框架中加载css和js文件失败的解决方法  # CI框架中site_url()和base_url()的区别  # CI框架中libraries  # helpers  # hooks文件夹详细说明  # php CI框架插入一条或多条sql记录示例  # php ci框架验证码实例分析  # CI框架中cookie的操作方法分析  # CI框架开发新浪微博登录接口源码完整版  # CI框架Session.php源码分析  # CI框架自动加载session出现报错的解决办法  # 如何解决CI框架的Disallowed Key Characters错误提示  # CI框架源码阅读  # 系统常量文件constants.php的配置  # 管理系统  # 放在  # 后端  # 加载  # 在这里  # 夹中  # 上午  # 首页  # 程序设计  # 进阶  # 相关内容  # 大家都  # 一句  # 就不  # 不是很  # 我把  # 感兴趣  # 去看  # 给大家  # 我将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  如何在宝塔面板中创建新站点?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Android实现代码画虚线边框背景效果  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  教你用AI润色文章,让你的文字表达更专业  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何在阿里云完成域名注册与建站?  Laravel怎么实现验证码(Captcha)功能  Laravel如何使用查询构建器?(Query Builder高级用法)  如何快速上传建站程序避免常见错误?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  EditPlus中的正则表达式实战(5)  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Android自定义listview布局实现上拉加载下拉刷新功能  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何撰写建站申请书?关键要点有哪些?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  Laravel如何集成Inertia.js与Vue/React?(安装配置)  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Python面向对象测试方法_mock解析【教程】  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  原生JS实现图片轮播切换效果  网站制作免费,什么网站能看正片电影?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  三星网站视频制作教程下载,三星w23网页如何全屏?  打造顶配客厅影院,这份100寸电视推荐名单请查收  大型企业网站制作流程,做网站需要注册公司吗?  Laravel怎么在Blade中安全地输出原始HTML内容  如何在Windows虚拟主机上快速搭建网站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  linux写shell需要注意的问题(必看)  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  如何快速重置建站主机并恢复默认配置?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  javascript基于原型链的继承及call和apply函数用法分析  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何在阿里云域名上完成建站全流程?