ci框架&框架设计思路

Posted zhuxineli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ci框架&框架设计思路相关的知识,希望对你有一定的参考价值。

先来说一下ci的基础用法防止以后忘记,也为了更好的适用到工作中去,我这里用的版本是3.1.6
<<< 基本的控制器、model就不说了,这都是最常用最熟悉的部分,下面先来说一下相比来说不太常用,但比较有意义的用法
<1> this>load>library();<2> this->load->helper();加载辅助函数
<3>创建核心系统类,ci启动时会加载很多的核心类文件,如果我们想修改这些文件或是扩展他们的话,可以这样做,在application/core目录下,新建一个前缀MY_+和源文件重名的文件名,即可进行扩展
<4> 创建附属类 有些时候,你可能想在你的控制器之外新建一些类,但同时又希望 这些类还能访问 CodeIgniter 的资源,那你有没有听说过get_instance()这个方法呢??该方法是返回ci超级对象,让我们可以操作ci里面所有的核心类而不用用$this的方式
<5> 钩子
<6>URI 路由
<7>错误处理
<8>判断是否以cli模式运行——貌似用处不是很多
<9> 管理多个程序,只需要在application下多复制一份即可拥有另一份程序文件
<10>处理多环境,根据设置的不同的environment环境变量决定在不同的环境下进行不同的操作,比如开发环境和生产环境可以显示不同的错误信息

>
这里不贴或尽量少贴代码,只写思路,因为感觉自己对基础知识掌握的比较薄弱,所以会写的比较详细,如果你一眼能看懂那就更好了
————–本小节会按照数据库对象的加载流程进行讲解—————-
<1>what is 单一入口?
<2>路由?难道还有多种访问方式?为什么会有这种操作?
<3>一次简单的访问首页,到底经历了那些过程?
<4>数据库对象是如何加载的?????为什么要用$this->load 这种方式?
<5>如何读取的配置文件,以及如何做到加载不同数据库?如何做到开发环境和生产环境无缝结合?
<6>$this->db->where()->order()->get();这种使用写法是什么鬼?
<7>怎么有时候 this, ci,到底啥玩意?
<8>有哪些不太常用,但又很好用的方法函数?
<1>单一入口:就是说所有的文件都必须经由指定的文件(ci框架中是index.php)进行跳转,翻译成白话就是:你知道所有文件的所有地址,但你没有办法通过绝对路径访问它。为什么?因为只有入口文件才包含调用各个类、函数,这就在一定程度上提高了程序的安全性,别人即使知道了你的文件路径也无法访问(当然,这只是提高安全性很基础的一步)。你肯定还记得自己动手做的第一个项目肯定不是单一入口的,比如你直接在index.php条状到同目录下的test.php,也就是说这个项目下你可以直接在浏览器中访问test.php,这就不是单一入口。所以,我们在设置计划任务时通常需要做权限设置或者通过服务器设置或者通过操作系统做权限设置。
<2>ci中访问路径有多种方式,默认的方式是这样的www.test.com/index.php/directory/controller/fun;额,这个问题过两天再说,实在是想开展下面的内容啊
<3>在访问index.php的时候,到底加载了那些文件,经过了那些步骤呢???一头牛要经过多少工序才能变成你餐桌上的牛肉或者是牛排或者牛肉干?你难道真的想吃兰州拉面??
————–这里只讲基本流程———–,
很详细的流程需要单独来讲,不知道以后还有没有这个心了
———–由于我基础比较差,针对每一个知识点会讲的很细————-
<3.1> index.php文件中基本什么都没干,唯一有用的就是包含了核心文件codeigniter.php
<3.2>codeigniter.php中,其实这个文件中的内容应该说的非常详细才对,但这里我不打算手的特别仔细了,另起一篇文章单独来说吧,这里只说对整理运行有用的地方,像是什么基准测试类,钩子类之类的东西就不说了
<3.2.1> 包含common.php,这在框架设计中是比较基础,且比较重要的一点,包含公共方法文件。另外,你可以想一下,包含的语句为什么写在codeigniter.php中,而不是index.php中????
<3.2.2>包含了所有控制器类的基类文件controller.php,这是所有控制器都要继承的类文件
<3.2.3> 实例化默认的控制器并调用默认的方法
重点内容<3.3> controller.php 中,该文件中的代码才是整个ci框架的核心
<3.3.1>首先是构造函数,self::$instance =& $this; 将本类或者继承本类的实例化对象赋值给变量$instance,以供单例模式调用;
<3.3.2> foreach中-循环加载核心文件,但从load_class这个方法名也可以判断出这是个加载类的方法,很明天加载的是什么?就是传入的参数
<3.3.3> $this->load =& load_class('Loader', 'core'); 这句话很重要,为什么呢?你有没有发现,所有model、library等核心文件都是通过$this->load->model();这种形式加载的,那加载的core下的Loader都干了些什么呢???

——–暂时写不下去了,每一段代码的意思都能明白,但组合不起来,思路断裂——,容我先去整理一下基本的获取数据库对象过程升级一下基础知识——2018-01-10——

以上是关于ci框架&框架设计思路的主要内容,如果未能解决你的问题,请参考以下文章

实践小节

GitLab CI Pipeline框架

ci 框架新手使用

关于PHP的CI框架

CI框架中一个类中调用另一个类中已经加载对象测试

CI框架-学习笔记