CI(CodeIgniter)学习第二讲

一、CI的文件结构
了解CI的文件结构可以帮助我们快速的对CI框架有一个整体的认识,就好像我们去了一个陌生的城市一样,对你来讲周围的一切都是陌生和未知的,要想快速的了解这座城市,你可以买一张这座城市的地图,整体的了解这座城市的方位、结构和风景等等之类的。

二、CI是如何工作的
我们不光要对CI框架要有一个整体的认识,同时还要清楚CI是如何工作的,这样才能快速的掌握和运用CI,还拿刚才去一个陌生城市来说吧,如果你想很快的
适应和融入这座城市,是否我们有必要知道一些关于这座城市的风土人情和文化习俗呢。我想还是很有必要的吧,毕竟我们得入乡随俗呀。
当然,军哥这里只是简单的介绍一下,让大家有一个大概的思维认知。

1、CI的文件结构。
大家还记得第一讲中的CI目录结构图吗,当时并没怎么详细说明,我们再来看一下。

根据上图我们可以知道,CI主要组成部分为,application(应用文件夹)system(系统文件夹)index.php入口文件

应用文件夹中主要是存放控制器、模型和视图等,系统文件夹中主要是存放组成CI的核心文件的,index.php入口文件是一个单一入口文件,所谓单一文件是指在一个网站(应用程序)中,所有的请求都是指向的这么一个文件,由它负责接收并处理URL中的控制器和方法。换句话说, 它调用一个 ‘控制器‘, 然后返回一个‘视图‘。

具体对单一入口文件的介绍我引用了高洛峰老师在BroPHP中对它的一个解释。如下:

  单一入口文件:

在使用PHP过程化编程时,每个PHP文件都能独立访问并运行,就像一个体育场有多个入口一样,需要在每个入口都要检票和安全检查。而采用单一入口模式进
行项目部署和访问,无论完成什么功能,一个项目只有一个统一(但不一定是唯一)的入口,就像一个体育场如果只能从一个入口入场(程序是抽象的,一个入口和
多个入口效率是一样的)控制起来则更灵活,几乎没有什么缺点。使用主入口文件部署项目的优点如下:

1、加载文件方便
在编写和阅读过程化程序代码时,经常会遇到文件之间互相包含,其中包括PHP使用include包括函数库和公共资源文件,也包括在HTML中使
用<link>和<script>加载CSS和javaScript文件。项目越大,文件越多越让人感觉头疼,就像一张大网一样
将文件交织在了一起,不容易找到头绪。而使用单一入口则解决这个难题,在项目应用中用到的任何一个文件,只要相对于单一入口文件的位置查找即可。

2、权限验证容易
如果每个PHP文件都可以独立访问,在做用户权限验证时就需要对每个文件进行判断。而采用单一入口则只需要在一个位置进行判断即可。

3、URL重写简单
如果每个PHP文件和不同目录下的PHP文件都可以独立访问,则在Web服务器中对URL进行重新编写时需要很多条规则。而采用单一入口则在URL重写时只需要简单的几条规则即可。

好,接着来具体看application(应用文件夹)、system(系统文件夹)中放了哪些文件以及它们的作用是什么吧。

application :
            cache          第一次安装时为空,如果你打开缓存设置,这个目录存放缓存数据

config         存放配置文件,包含网站的基本配置信息
            controllers    存放你项目的控制器目录
            core           该目录可以扩展系统的核心文件
            errors         包含出错信息页,你不必修改这个目录
            hooks          首次安装时为空,用来存放你创建的钩子。钩子是 用来装载其它文件的控制方法
            helpers        辅助函数,你可以对系统的辅助函数进行扩展
            language       存放你本国语言的文件目录

libraries      类库,你可以创建自己的类库
            logs           如果你设置打开了系统的错误日志,日志文件就默认保存在这个目录
            models         存放你项目的模型目录
            views          存放视图的模板目录

system :            
           core            存放系统核心文件

database        CI框架的数据库类的类库文件
           fonts           没有在用户手册中介绍,存放水印图像使用的字体
           helpers         辅助函数,你可以对系统的辅助函数进行扩展
           language        存放英语的文件目录

libraries       存放一些类库的目录,比如SESSION类、分页类、图像类等

应用文件夹(application)中,最重要的文件夹是config,该文件夹内有两个需要关注的文件:config.php 和 database.php。
,其次是controllers、models和views文件夹,分别存储你网站中的控制器、模型和视图。

爱问问题的你可能会纳闷CI为什么要这样来设置文件结构,其实啊,为什么要把代码放在这个目录而不是那个目录是没有什么理由好讲,这就是CI里的一种约定。

另外细心的你是不是又发现application和system有些文件夹是相同的呢,如core、helpers、libraries等。其实这也是由
CI结构约定的, 当你装载一个辅助函数helper, 或类库文件library,
CI会在上述两个目录中查找,比如你要装载一个类叫做无限分类的类Category,
CI会先查找application/libraries目录。如果这个目录中不存在,CI会寻找system/libraries目录。这意味着可以通
过把同名的文件放入application目录来取代CI核心库的libraies,
helpers。但不要轻易尝试这样做,因为这种高度的灵活性需要你拥有足够多的CI使用经验。

2、那CI是如何工作的呢?

上一节我们快速的搭建好了一个CI网站,浏览器成功的显示出一个欢迎界面。我们不禁要问那究竟是如何显示出来的呢?其实根据我们前面对CI的介绍和结构分析之后,我们不难发现这跟CI使用M-V-C模式和单一入口文件有关。

我们来简单分析一下:

例如当我们访问的时候,程序会依靠index.php来做大量的初始化工作,调用大量的基础类库,并根据index.php后面的参数来加载控制器和方
法,然后调用模型,加载视图等内容信息。当然在这个例子当中index.php后面你并没有看到任何参数,但这不代表就没有参数存在,因为CI事先已经默
认指定好了控制器和方法的参数,这个默认的参数可以自己指定,配置文件存放在application/config/routes中,该配置文件中包含下
列设置:

$route[‘default_controller‘] = "welcome";$route[‘404_override‘] =
‘‘;上述config文件,默认的控制器为welcome,如果没有指定方法,index方法会被默认指定。如果请求的控制器或方法不存在,则程序会转
到“404”页面。结果如图所示:


另外需要进一步说明的是上述URL中方法(也称为函数)必须是前面那个控制器中存在的。或则说,你不能够在一个控制器内调用其它控制器内的方法。

我们来总结一下CI处理URL的具体细节(部分摘自CI中国论坛):

假如URL网址为:/control/func/param1/param2/...


  URL片段


  用途

  定位你网站的基本URL

  /index.php

定位CI路由器并读取URL的其它部分,分析后定们到相关网页

  /control

CI将调用的控制器的名称(如果没有设置控制器名称,CI将调用你在config文件中设置的默认控制器)

  /func

CI将调用的函数的名称,位于所调用的控制器内。(如果不存在该函数,默认调用的是index函数,除非你使用_remap)

  /param1

CI把这个作为传递给函数的变量

  如果还有/param2/...

CI把更多的参数作为变量传递给函数

  所以上面网址可以理解为:/控制器名/方法名/方法的参数1/方法的参数2/...

总结:军哥对具体CI是如何工作的讲解的还是比较浅显和笼统的,主要目的还是先快速的带大家建立起一个对CI的初步认识,更多的后面会逐渐来深入。

好,这讲就到这吧,下一讲我们来学习如何具体来写一个控制器、方法和视图,然后我们自己写一个大家都懂的例子——“Hello World!”

时间: 2024-10-18 05:56:53

CI(CodeIgniter)学习第二讲的相关文章

python学习第二讲,pythonIDE介绍以及配置使用

目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以及配置IDE 1.初始化IDE 2.打开python项目. 3.pycharm设置python的默认解释器版本. 4.pycharm设置为所有用户可以使用,以及启动pycharm 5.设置pycharm启动图标(快捷方式) 6.卸载之前的pycharm python学习第二讲,pythonIDE介绍

ptyhon 学习第二讲

第二讲.成绩的输入 成绩的分布和判断,有人会问我,为啥input语句输入要用int去括起来呢?很明显,跟我上面第一讲说的,input输入的都是为字符型str,那么str怎么去和身为整数型的int数字去比较呢?那么只能去转化为整数型int()了: 如果大于等于90成绩为A,如果大于等于80成绩为B,如果大于等于70成绩为C,如果大于等于60成绩为D,否则不及格:那么肯定大家的问题就来了,90满足第一个IF的条件,但是它也满足第二个if和第三个第四个的条件啊,怎么不去精准的定义它呢? 其实啊在PYT

android学习-第二讲(修改项目名称和图标,log,过滤器)

一.在app/src/main/res下有 AndroidManifest.xml打开,打开后如下图1 二.日志工具log log.v()  log.d()  log.i()  log.w()  log.e() 在下图中 例如:Log.d("MainActivity", "你好");第一个参数为类名,一般为当前类名,第二个则是想打印的字符串, 中存在输出

【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的

[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 By hzp123   at 2014-02-18   265 阅读   0 回复   0.0 希赛币 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们,要知道这才刚刚开始额~~~ 这一节,我们主要来了解CI的文件结构和CI是如何工作的.这一点特别的重要! 一.CI的文件结构:了解CI的文件结构可以帮助我们快速的对CI框架有一个整体的认识,就好像我们去

斯坦福大学深度学习与自然语言处理第二讲

第二讲:简单的词向量表示:word2vec, Glove(Simple Word Vector representations: word2vec, GloVe) 转载请注明出处及保留链接“我爱自然语言处理”:http://www.52nlp.cn 本文链接地址:斯坦福大学深度学习与自然语言处理第二讲:词向量 推荐阅读材料: Paper1:[Distributed Representations of Words and Phrases and their Compositionality]]

python学习第二天

python学习的第二天就是个灾难啊,这天被打击了,自己写的作业被否认了,不说了,写博客还是个好习惯的,要坚持下去,就不知道能坚持到什么时候.呵呵!!! 这天教的知识和第一天的知识相差不大,区别在于比第一天讲的更细了(我们是两个老师教的,风格是不一样的),这次也写那些比较细的知识点. python的简介 (1)你的程序一定要有个主文件. (2)对于python,一切事物都是对象,对象基于类创建.#似懂非懂,不过有那么点似懂. 知识点 #__divmod__ 会把两个数字相除的商和余数以元组的方式

从大数据菜鸟走上大师的历程 第二讲:函数定义,流程控制,异常处理

Scala 第二讲 函数定义,流程控制,异常处理 For 循环  for(左边为单个对象obj  <-  右边为对象集合objs ) for 循环里把右边的对象赋给左边 现在正是学习大数据的最好机遇,不花一分钱就可以成为大数据高手,实现年薪50万的梦想. 王家林的第一个中国梦:免费为全社会培养100万名优秀的大数据从业人员! 如果您有兴趣请点击这个链接进入大数据的学习 http://blog.sina.com.cn/s/blog_8fbd39ee0102vto3.html 如果您确实感觉视频教程

16位汇编第六讲汇编指令详解第二讲

16位汇编第六讲汇编指令详解第二讲 1.比较指令 CMP指令 1.CMP指令是将目的操作数减去源操作数,按照定义相应的设置状态标志 2.CMP指令执行的功能与SUB指令(相减指令)一样,但是不同的是CMP指令之根据结果设置标志位 而不修改值 可以操作的指令格式 CMP reg,imm/reg/mem CMP mem,imm/reg 上面是CMP指令的语法,具体的也可以查询帮助文档,inter手册 inter手册查的办法 第一个框代表了CMP指令的所有语法 比如 reg,reg 表示可以比较寄存器

跟我学《JavaScript高程3》 第二讲,课程笔记

跟我学<JavaScript高程3> 第二讲:第3章 课程制作:bling,兴哥,5年Java,3年前端 课程知识:JavaScript.Html.Css 课程目标:前端体系课程,逐步深入,找到一份前端工作 课程大纲:本书目录结构 适合人群:前端初学者,可以0基础,但要认真,踏实 课程回顾 1.静态项目基本结构:html.css.js.images 2.文件的方式引入一个JavaScript脚本文件:引入方式.引入路径 3.变量编写Hello,world:变量的定义,使用变量. 补充:变量在讲