之前做后端开发的时候,因为都是很小的功能或项目,所以基本都是手写原生php。不过这样的开发效率在面对稍大一些的项目的时候是比较低的。因此花时间学习一下php相关框架CI的使用。

MVC架构

在学习CI框架之前,先了解了一下MVC。它是一种设计典范,CI框架也是基于此的。

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

以上是摘自百度的介绍。简单地说就是把一个项目的代码分离成三个部分来实现,逻辑清晰,便于维护。

下面逐一谈一下对那三个部分的理解:

  • View(视图)这是上层,是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。它是提供给用户的操作界面,是程序的外壳。也就是面向用户的东西。
  • Controller(控制器):这是中间层,它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。也就是负责与用户交互。
  • Model(模型):这是下层,是应用程序中用于处理应用程序数据逻辑的部分,也就是程序需要操作的数据或信息。通常模型对象负责在数据库中存取数据。

这样子划分来组织代码,就会显得项目逻辑很清晰了,也方便维护。

CodeIgniter框架

了解了MVC的概念,现在进入正题。学习CodeIgniter框架(简称CI)。对CI框架的学习参考了浅析CI框架CI官方手册等资料。

框架的流程

这是网上找的图,比较清晰地展现了流程:

  • index.php 文件作为前端控制器,初始化运行 CodeIgniter 所需的基本资源;
  • Router 检查 HTTP 请求,以确定如何处理该请求;
  • 如果存在缓存文件,将直接输出到浏览器,不用走下面正常的系统流程;
  • 在加载应用程序控制器之前,对 HTTP 请求以及任何用户提交的数据进行安全检查;
  • 控制器加载模型、核心类库、辅助函数以及其他所有处理请求所需的资源;
  • 渲染视图并发送至浏览器,如果开启了缓存,视图被会先缓存起来用于后续的请求。

框架目录结构

  • application目录:用于开发者编写相应的配置以及逻辑处理,开发者只需在这个目录下添加自己需要的开发文件。
  • system目录:框架的系统库,里面包括核心库,类库,辅助类库,数据库等,这些文件,开发者最好不要擅自修改。
  • user_guide:用户手册。

重要组成

控制器

开发者在 application/controller 目录下添加自己的controller 控制器,但是每个控制器都要继承核心库里的基类 CI_Controller,它已获取到整个框架的核心类库对象,通过它基本可以调用CI框架下的核心方法。

模型

模型就是专门用来和数据库打交道的 PHP 类,开发者在 application/models 目录下定义自己的模型类,都要继承 模型基类 CI_Mode。当你在控制下调用模型,只需要下面一行代码就实例化了:
$this->load->model('model_name');
官方的对模型介绍更专业

视图

简单来说,一个视图其实就是一个 Web 页面,或者页面的一部分,像页头、页脚、侧边栏等。需要在控制器里加载,像这样$this->load->view('name');,name为视图文件名,如果是php后缀可省略,详见官方手册

辅助函数

辅助函数是帮助我们实现特定功能的函数,如验证码辅助函数,Cookie辅助函数,可以大大提高开发效率,简化编程,具体使用方法可以参照官方手册辅助函数以及查看辅助函数目录

CI类库

相比于辅助函数,CI类库提供了用于实现完整大功能的类,使用方法可参考官方手册以及查看类库目录.

数据库

CI框架封装了多种数据库驱动与连接方法,让我们轻松配置就能连接上,且封装了一些查询构造器与生成查询结果,让代码看起来方便简洁。需要在application/config/database.php 文件下配置链接的参数。具体看手册啦。

总结

框架为开发提供了很多便利好用的工具,也使代码看起来更简洁,逻辑清晰。不过要想熟练使用,还是要在实际开发中多使用。上述的CI框架具有轻便易上手的特点,因此它比较适合中小型的项目使用,不适合写太复杂的业务逻辑。

框架的使用还是有许多细节要注意的,想要一下子全部摸清不太可能,建议在开发中根据需要去具体学习,多看官方手册。

最新文章

  1. 用ffmpeg合并音频文件
  2. 基于chrome内核的UXSS
  3. BZOJ3356 : [Usaco2004 Jan]禁闭围栏
  4. 使用面向对象思想处理cookie
  5. C#动态数组ArrayList和List<T>的比较
  6. Java实现简单版SVM
  7. nodejs端口被占用。
  8. Linux解压乱码
  9. PHP写的爬虫,爬指定网站页面上的各种图片
  10. mysql union 与 union all 语法及用法
  11. Spring(mvc)思维导图
  12. Java NIO系列教程(七) selector原理 Epoll版的Selector
  13. .NET控件名称缩写一览表 zz
  14. slf4j日志的使用
  15. BZOJ4229选择——LCT+并查集+离线(LCT动态维护边双连通分量)
  16. cxListView和dbgrid联动
  17. vue 基础(一)
  18. 彻底理解ReentrantLock
  19. 参数 out
  20. 简单的socket_server 和 socket_client(实现文件的上传功能)

热门文章

  1. 基于C#实现与新大陆扫码枪通信
  2. iOS 定义多个参数函数的写法
  3. 关于SpringMVC的几件小事
  4. C语言——指针总结
  5. STM32启动BOOT0 BOOT1设置方法
  6. 使用PHP 格式化时间
  7. Linux部署tomcat服务常用命令
  8. Mysql(四):数据操作
  9. 从Windows文件夹到Linux分区
  10. 13_Redis_持久化