您的位置:首页 > 编程语言 > PHP开发

CI框架学习笔记第一天

2017-04-30 09:13 429 查看
此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。

若是想看整个学习笔记代码和数据库可点击此处(包含个人书写的项目代码及数据库文件)。

学习目标

使用CI框架开发商城(前台和后台)。


CI简单介绍

小巧,快速。
相对于学习其他框架,更容易掌握。


CI快速入门

获取与安装:

在官网下载:http://codeigniter.org.cn/

将下载好的文件解压到工程目录下:



直接访问:http://localhost/citest/



看到此界面表示安装成功。

定义自己的视图和控制器:



其中user_guide文件夹删除.

重点关注application文件夹



控制器说白了就是一个类文件,并要继承CI_Controller,此时我们要借鉴ci自己提供的welcome.php文件。

关于命名规范的问题,如果我们使用别人的框架,尽量要遵守别人制定的规范:

 类名的首字母应该大写,如果名称由多个词组成,词之间用下划线分开。

 类中所有其他方法的名字小写,多个单词之间用下划线。

 类文件名使用小写

定义hello控制器,有一个方法,index

访问:涉及到ci的url模式

CI默认支持的url模式是pathinfo形式,也就是使用/隔开。

例如:http://localhost/citest/index.php/hello/index

其中http://localhost/citest/index.php/是固定的,代表入口文件,而后面的hello表示是控制器,index表示的是控制器中的方法。

在控制器中必须加入这一句:

defined(‘BASEPATH’) or exit(‘No direct script access allowed’);

这句话的作用是:为了防止跨站攻击,直接通过访问文件路径用的



视图文件应该放在view目录下:



在控制器中调用视图。

使用$this->load->view(“视图名”);即可。

上面的操作只是简单的将html页面展示出来。而实际上是在控制器中经常获得数据传送到视图当中。使用load->view方法的第二个参数分配数据即可。



在视图中进行调用。



在CI框架中,模板语法是什么样的?CI使用的是原生的PHP语法,效率高。

在视图中直接使用title输出,而不是使用data[‘title’],需要注意,CI他使用了一个extract函数,将数组中变量导入当前符号表当中,所以直接使用键名作为变量名访问。

必须清楚的几个概念

框架开发和二次开发
打个比方:买房子
买二手房,直接拎包入住。好比是二次开发,dedecms、phpcms、echshop
买新房,一开始不能住人,自己去买各种专修材料进行装修,才能入住。好比是框架开发,只提供了基础的功能。
CI是框架,用于框架开发。
MVC
M:model模型,一般是直接操作数据库的
V:view模型,一般是指模版文件,比如html页面,用于展示数据的
C:controller,控制器,扮演了交通警察的身份,接受请求,然后调用相应的模型来完成工作,获取数据,最后分配到视图。
CI框架也是一个MVC框架。使用CI框架开发时,大部分工作就是在MVC这部分。


MVC完整案例

使用mvc完成新闻的一组增删改查操作。
书写一个news控制器。




CI操作数据库

1、数据库相关配置,在config/database.php



2、连接数据库
CI提供了专门的数据库操作类,有两种方式,只需要加载该类即可。
手动载入:在需要使用数据库操作类的地方,使用$this->load->database()即可,比如在模型中载入。
自动载入:在config下面的autoload.php的配置文件中,$autoload['libraries'] = array(‘database’);即可。




3、操作
定义news模型
定义Model时的书写规范:Model_name是模型类的名字。类名的首字母必须大写,其他字母小写。
文件名是类名的小写版。




如何使用数据库操作类进行操作呢?

当我们连接了数据库之后,可以使用this−>db来操作数据库,最常用的一个方法就是this->db->query(sql语句);方法。

如果直接使用query方法,是比较麻烦的。每次还得自己来拼凑sql语句,更希望有一个能够自动完成增删改查的功能的方法。CI中也提供了一个类叫做active record,也叫AR。最基础的一组操作如下:

 this−>db−>insert();this->db->update();

 this−>db−>delete();this->db->get();

完成添加新闻

在news_model中定义add_news方法完成添加操作。



在控制器中,接收表单提交的数据然后调用model里面的添加方法完成添加操作。

先解决一个问题,在视图中表单的action的值该如何来写。



这里涉及到CI的辅助函数,

配置base_url,如下:



默认情况下,url辅助函数是没有加载的,要使用,则需要加载,可以在配置文件中,配置自动加载,也可以在需要使用的地方手动加载。

自动加载配置:



url辅助函数中,提供了base_url()和site_url()方法。

其中,base_url的值是在config中配置的base_url的值,如http://localhost/citest/

而site_url的值则是base_url+index_page,如http://localhost/citest/index.php

所以,在视图中要定义控制器的某个动作(url),使用site_url



在控制器中定义insert方法完成插入操作



完成新闻的读取

在news_model中定义一个方法来获取数据



在news控制器中定义一个方法index,调用模型中的方法获取新闻数据,然后将数据分配到视图。

CI的执行流程

思考题:

1、默认的welcome页面是怎么显示的?

2、this表示的是什么?3、经常使用的this->load怎么理解?

CI是一个单入口的框架,所有的请求都需要经过index.php文件。

大致的流程如下:



分析index.php文件





这个和我们的文件夹结构名称一一对应,可以更改。如果更改了,只需要将在此处修改一下名称与文件夹名字相同即可。





最后载入codeIgniter.php文件。



分析codeIgniter.php

首先载入通用函数库。



载入配置文件(常量配置)



载入核心类

初始化Benchmark类



初始化钩子类



初始化配置类



初始化字符编码类



初始化uri路径类



初始化路由类



初始化输出类



初始化安全类



初始化输入类



初始化语言包类



载入ci的总控制器



通过router对象$RTR的两个方法获取当前的类名和方法名



比如,输入的是http://localhost/citest/index/welcome/index,那么上述代码获取的class就是welcome,method就是index,一个是控制器,一个是方法名。如果没有方法名,则默认使用index方法。

这里new了一个对象,叫做CI,这是CI框架中的超级对象。



new的时候做了些什么?

分析CI_Controller.php

采用单例模式创建controller对象。





将前面载入的核心类,作为CI对象的属性。



然后载入Loader.php类。



在控制器中出现的this就是超级对象,this->load其实也是一个对象Loader对象。

超级对象生成后,我们就可以使用超级对象提供的一系列方法完成我们的业务逻辑,如果要完成其他功能,可以载入其他的类文件,辅助函数,这些类文件和辅助函数包括CI已经提供好的,也可以是自己定义的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息