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

简介: 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的 By hzp123   at 2014-02-18   265 阅读   0 回复   0.0 希赛币   之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们,要知道这才刚刚开始额~~~这一节,我们主要来了解CI的文件结构和CI是如何工作的。

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

By hzp123   at 2014-02-18   265 阅读   0 回复   0.0 希赛币
 
之入门教程之第二讲:分析CI结构和CI是如何工作的
大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们,要知道这才刚刚开始额~~~


这一节,我们主要来了解CI的文件结构和CI是如何工作的。这一点特别的重要!




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


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


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

130x263 153x378


根据上图我们可以知道,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”页面。结果如图所示:

600x114
另外需要进一步说明的是上述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!”

目录
相关文章
|
Kubernetes Cloud Native jenkins
下篇:使用jenkins发布go项目到k8s,接上篇的手工体验改造为自动化发布
下篇:使用jenkins发布go项目到k8s,接上篇的手工体验改造为自动化发布
502 1
|
2天前
|
监控 jenkins 测试技术
构建健壮的CI/CD流程:策略与实践
【5月更文挑战第15天】构建健壮的CI/CD流程对于提升开发效率和软件质量至关重要。核心价值包括自动化构建、测试和部署,降低风险,及保证质量。选择适合团队的CI/CD工具,定义清晰阶段和任务,实现自动化,并确保流程的可靠性和稳定性。实践策略包括代码质量检查、全面测试、监控反馈和持续改进。通过这些方法,团队能更专注于核心功能开发,实现高效、高质量的软件交付。
|
2天前
|
JavaScript Java 测试技术
基于Java的软件开发团队管理网站的设计与实现(源码+lw+部署文档+讲解等)
基于Java的软件开发团队管理网站的设计与实现(源码+lw+部署文档+讲解等)
21 0
|
2天前
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
73 0
|
2天前
|
安全 Devops Java
你以为搞个流水线每天跑,团队就在使用CI/CD实践了?
在实践中,很多团队对于DevOps 流水线没有很透彻的理解,要不就创建一大堆流水线,要不就一个流水线通吃。实际上,流水线的设计和写代码一样,需要基于“业务场景”进行一定的设计编排,特别是很多通过“开源工具”搭建的流水线,更需要如此(商业的一体化平台大部分已经把设计思想融入自己产品里了)。 • 流水线的设计与分支策略有关 • 流水线的设计与研发活动有关 清晰的代码结构,标准的环境配置,原子化的流水线任务编排,再加上团队的协作纪律,和持续优化的动作,才是真正的践行CI/CD实践
148 4
|
2天前
|
存储 Shell 数据安全/隐私保护
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
Python 自动化指南(繁琐工作自动化)第二版:十五、使用 PDF 和 WORD 文档
59 1
|
2天前
|
Shell API 开发者
Python 自动化指南(繁琐工作自动化)第二版:十四、使用谷歌表格
Python 自动化指南(繁琐工作自动化)第二版:十四、使用谷歌表格
23 1
|
6月前
|
运维 Devops 持续交付
软件开发常说的CI/CD是什么
软件开发常说的CI/CD是什么
80 0
|
8月前
|
存储 Linux 测试技术
Travis CI 一些专用术语介绍
Travis CI 一些专用术语介绍
32 0
|
机器学习/深度学习 存储 监控
DVC 使用案例(三):机器学习持续集成与持续交互( CI/CD )
将 DevOps 方法应用于机器学习 (MLOps) 和数据管理 (DataOps) 越来越普遍。对于一个完善的 MLOps 平台来说,需要囊括资源编排(为模型训练提供服务器)、模型测试(验证模型推理)、模型部署到生产,以及模型监控和反馈等机器学习生命周期各个环节。 DVC 可以管理数据/模型和重现 ML 流水线,而 CML 可以协助编排、测试以及监控。