• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

CI框架 安装、路由、模型、视图、控制器、实现用户CURD、跳转函数封装、分页插件、源码分析

Mr.Lee 由 Mr.Lee
2018年5月20日
在 CodeIgniter, 后台框架
0
CI框架 安装、路由、模型、视图、控制器、实现用户CURD、跳转函数封装、分页插件、源码分析
0
分享
11
浏览

CI框架

angularJs框架(运行一些设计模式、依赖注入)、laravel(依赖注入)。学习思想上的东西。

今天CI框架会带大家看源码(前题声明难度有点大)。

①-框架简介

CI框架,是一个非常小巧和轻量级的框架,也是最容易入门的框架(里面有一个按需加载的概念,CI框架很多东西都不会自动的载入,当你需要的时候,需要自己去手工的载入,所以它的性能在众多框架中算是比较快的一个(php框架),至少比laravel快了很多。在众多框架中laravel应该是算得上是最慢的。

目前比较流行的框架有CI、laravel;同时还有一些性能为主的C语言框架,例如yaf(c语言框架、使用C语言为php编写了一个扩展windows php_yaf.dll文件 mbstring.dll Linux php_yaf.so—php.ini)、phaclon(这个框架是国外开发的,性能完全不必yaf差,普及度不及国人开发的yaf)等。

框架就是php自带的,直接可以使用,yaf框架是不提供模型的。

class UserController extends Yaf_Controller{

}

面对过程、面向对象、面向切面?

答:这三种思想没有哪一个是最好,只有合适自己的业务就是最优的。

问题:为什么laravel这么慢,还有那么多企业在使用?

答:谈一下个人的理解。

  1. 属于跟风比较多。(很多企业压根就不了解这个框架,只是看到市场现状很多人在使用,那么觉得也要跟上潮流、不得不使用)鸭子现象(从众)
  2. 这个框架应用了很多的设计模式,便于开发和维护(并且还要知道laravel产品就是syfomy框架的儿子)
  3. 非常明显的一个特点,重路由设计。每一个控制器的方法的访问都必须要设计一个URL地址(路由规则)。index.php/user/add ——-> goods/lst 设置在laravel里面可以不存在控制器、也可以不存在模型,视图也可以不存在,但是路由必须存在(可以把所有的业务逻辑放在路由里面完成)。主要是现在web项目相关的项目更倾向于前后端相分离(API接口—》URL地址—》路由规则)。
  4. 目前框架使用composer的管理工具,可以把互联网上所有php好的工具类库全部整合在一起。(composer理解成node的npm或者Linux的yum工具、前端的bower) composer install upload
  5. 并且laravel框架是完全的面向对象的框架,并且只有面向对象的编程思想才可以更好的和现实社会形成联系。(面向对象里面的思想可以和一物一世界完全对应)(面向过程、面向对象、面向切面【钩子函数的思想】…..)

TP里面钩子函数:只需要用户定义在特定的位置,不需要手工的执行,框架会在特定的时间执行这个钩子函数,对数据进行处理。(AOP就是面向切面编程的缩写)

②-CI框架简介

  1. 什么CI框架?

答:是一个外国人开发的小巧的框架。目前存在两个主流分支版本,一个是3.x系列,一个是2.x系列。本次课程学习是2.x系列,企业基本都是选择这个版本。(LTS:长时间维护,3年左右的维护期)

③-CI框架入门使用

框架资料

  1. 在虚拟主机目录解压对应的框架

整体目录结构

分析核心代码目录

application目录

例如:自己扩展CI的控制器类

  1. ci框架的访问

两种访问方式,直接访问,全路径访问

全路径访问(默认控制器是welcome控制器、方法是index方法;URL访问模式叫做pathinfo)

index.php?m=Home&c=Index&a=index (普通模式)

index.php/Home/Index/index (pathinfo模式)

index.php?s=Home&Index&lst(兼容模式)

Index-lst-12.html —-> index/Home/Index/lst/12 (重写模式)

④-CI框架-控制器

如何上手一个CI框架?

答:1. 学习控制器 2. 学习视图 3. 学习模型

具体:

一个控制器如何学习?

  1. 学习控制器写在哪里?
  2. 控制器文件的命令如何命名?
  3. 文件里面的内容如何书写?有哪些注意事项?
  4. 控制器里面的方法如何书写?注意事项?
  5. 控制器方法里面如何载入视图?
  6. 如何给视图赋值变量?
  7. 视图里面如何显示变量信息?
  8. 最后如何在控制器里面实例化模型,从数据库获取数据?

实操:

  1. 控制器文件写在哪里?

  1. 控制器文件如何命名?

  1. 控制器里面的内容如何书写?

确保所有的请求都是从单入口开始的。

  1. 控制器里面的方法如何书写?

浏览器访问

注意:在CI框架里面,方法名称不能以_下划线开头,在浏览器是无法访问,但是不影响在类的方法内部被调用

效果

注意:内部使用不受影响

5. 注意:CI框架控制器里面有一个方法比较特殊,叫做_remap方法,该方法会在其他方法被调用之前,自动的调用

效果

实际操作:可以做一个简单的前台权限的验证操作。

验证

6. 方法里面如何载入视图?

效果

⑤-CI框架-视图

思考:

  1. 视图写在哪里?
  2. 视图文件如何命名?
  3. 视图内容如何书写?
  4. 控制器如何调用视图,如何给视图赋值
  5. 视图里面如何显示变量(是否可以使用标签语法、或者原生写法)
  6. 视图可以分目录管理
  7. 控制器里面可以载入多个视图
  8. 视图可以分目录管理,那么控制器是否可以分目录管理?可以(分目录其实就是之前其他框架里面的分模块管理:前台、后台)

实操

  1. 写在哪里?

  1. 视图文件如何命名?

  1. 视图里面的内容如何书写?

4. 如何在控制器里面载入视图文件?

效果

5. 如何在控制器里面给视图赋值变量,然后让变量在视图文件显示?

第一种方式赋值[使用少]

视图代码

效果

第二种方式[使用多]

视图代码

效果

6. 注意:CI框架里面的控制器和视图是否可以分目录保存?

控制器分目录,书写位置:

控制器代码:

访问:

视图分目录,书写位置:

控制器代码

效果

注意:CI框架里面的控制器里面可以载入多个视图

视图文件位置:

控制器代码:

效果

⑥-数据库操作

思考:

  1. 在CI如何书写配置信息?
  2. 在CI里面如何从数据库里面获取数据?

实操:

  1. 建一个用户表

  1. 先配置数据库的信息

配置

  1. 在控制器里面获取数据库的数据

  1. 在视图里面显示

视图

效果

注意事项:在获取数据操作的时候,必须连接数据[$this->load->datebase()], 但是有的时候容易忘记,所以可以自动载入

在控制器里面就不需要在手工的连接

这个也被称为CI里面的按需加载。【要连接数据库,才使用$this->load->database()连接】

⑦-CI框架-模型

思考:

  1. 模型文件写哪里?
  2. 模型文件如何命名?
  3. 模型文件里面的内容如何书写?
  4. 在控制器里面如何调用模型?

实操:

  1. 模型文件写哪里?

  1. 模型文件如何命名的问题?

  1. 模型里面的内容书写

书写一个get_user方法获取数据

在控制器里面调用

视图显示数据

简单的实现一套用户的curd

使用CI框架实现一套完整的增删改查。

①-用户增加

  1. 在user.php控制器文件增加一个add_user方法

  1. 增加一个add_user.php视图文件

备注:在form表单提交的actione里面使用site_url函数之前,需要在自动载入里面进行配置。

  1. 在user_model.php文件里面增加一个add_user方法,入库数据

②-用户展示

1. 在user_model.php模型文件增加一个get_user方法

  1. 在user.php控制器里面增加一个get_user方法

3. 在lst.php视图显示数据

③-用户删除

  1. 修改lst.php视图文件,增加删除链接

效果

  1. 在user.php控制器里面定义del_user方法,完成删除操作

注意:获取地址栏里的主键id,需要使用按段获取

3. 在user_model.php模型里面定义一个del_user方法【特别注意:在CI里面做数据删除的时候,需要根据受影响的行来判断数据是否删除成功!】【$this->db->delete方法的返回值是sql语句是否成功运行】

调试技巧:获取上一次执行的sql语句。

④-用户编辑

  1. 在lst.php视图里面增加一个编辑的链接

效果

  1. 在user.php控制器里面增加一个edt_user方法

  1. 在user_model.php模型文件增加两个方法find_one和edt_user方法

  1. 增加一个edt.php视图文件

三、跳转函数封装

由于CI框架里面的跳转函数是redirect函数,它不能实现跳转的时候带提示信息。

我们可以参照TP的实现,封装一个带提示的跳转函数。

  1. 参照TP的实现,完成一个函数的封装,写到如下位置

  1. 调用

自动载入自己定义的函数

使用

效果

四、分页插件

①-Ajax分页

在CI里面实现Ajax无刷新分页的效果,还使用一个pagination插件。

网站:http://www.zhangxinxu.com/jq/pagination_zh/

  1. 在项目引入分页插件

  1. 在页面调用分页插件css和js

注意:必须先引入jQuery

  1. 定义数据显示容器和分页字符串

  1. 在js里面调用

在user.php控制器的get_user方法获取总记录

在user_model.php文件定义一个方法获取总记录

分页插件调用

分页页码点击回调,发送Ajax获取数据

数据格式化函数

  1. user.php后台返回Ajax数据

五、CI框架源码分析

①-分析入口文件

②-CI的核心引导类

注意:一般开源产品的common.php里面存放都是项目必须要使用的函数。

先分析一下common.php里面的函数【重点分析】

load_class函数

函数主要是配置load_class使用

③-CI里面的模型实例化1-装载器分析

在上面user.php文件里面完成模型的实例化,底层原理是怎么样的?

思考:在控制器里面$this->load代表是什么?

答:$this->load 这个属性在用户自定义的控制器里面是不存在的,会去父类的控制器里面查询CI_Controller.php里面查找

通过查找发现父类里面的构造方法里面使用load_calss(‘Loader’,’core’)进行赋值操作。查看 load_class.php的源码,进行分析

面试题:CI装载器是做什么的?主要是负责类的实例化操作,是system/core/loader.php的实例

先记住:load_class功能:1. 载入类 2. 实例化类 3. 记录类

并且:整个CI框架没有类的自动载入机制,全部使用load_class完成。

④-CI里面的模型实例化2-实例化模型

$this->load->model(‘user_model’,’user’); === new CI_Loader()->model(‘user_model’,’user’)

底层原理:

$this->load本质就是CI_Loader的实例,所以我们需要分析一下Loader.php这个文件里面的内容,在分析一下里面model方法,这个方法是实例化模型的关键。

⑤-CI模型里面的db属性是咋回事?

之前:$this->db = new DB(); 这里的$this也是超级对象(get_instance()函数的返回值,或者就是CI_Controller::instance属性—$this)

  1. 查找db属性,肯定是在自己的类里面查找,不存在则去父类里面查找

  1. 查看超级对象下是否存在db属性

3. 查看系统的控制器

  1. 查看装载器的方法

  1. 分析装载器里面的_ci_autoloader方法

  1. 查看装载器的$this->dabase()方法

标签: 分页插件安装实现用户CURD控制器模型源码分析视图路由跳转函数封装
上一篇文章

Yaf框架 安装、PHP-ext引入、目录结构、路由、模型、视图、控制器

下一篇文章

PHP7 太空船、const 定数组、匿名函数和匿名类、字符串转换、函数调用类里面的方法、不同的名空间调用类、数组的赋值、函数的参数、多异常抛出、list 给数组赋值

下一篇文章
Swoole 安装、扩展源码、线程、进程、执行过程、常用事件、Http 服务器、WebSocket 服务器、Mysql 连接池、毫秒定时器、异步文件读取

PHP7 太空船、const 定数组、匿名函数和匿名类、字符串转换、函数调用类里面的方法、不同的名空间调用类、数组的赋值、函数的参数、多异常抛出、list 给数组赋值

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3