CI框架
目录结构说明
license.txt | 许可协议 |
---|---|
user_guide | 用户手册 |
system | 框架核心文件 |
application | 应用目录 |
index.php | 入口文件 |
MVC
1、入口文件:唯一一个让浏览器直接请求的脚本文件
2、控制器controller:协调模型和视图
3、模型model:提供数据,保存数据
4、视图view:只负责显示,表单……
5、动作action:是控制器中方法,用于被浏览器请求
CI中的MVC
访问url使用的是pathinfo
入口文件.php/控制器/动作
MVC文件夹都在application中
默认控制器是welcome
默认动作是index
控制器
1、不需要加后缀,直接是类名.php
2、文件名全部小写
3、所有的控制器,直接或间接继承自CI_Controller类
4、控制器中,对动作(方法)要求:
1)public
2)不能以_开头
5、与类名相同的,会被php当作构造方法,相当于__construct()
视图
1、在控制器中如果加载视图:$this->load->view(视图);//直接写视图名字,不写拓展名,如果有子目录,则写上目录名。
2、视图中,直接使用原生php代码
3、将数据传递给视图,可以使用:$this->load->vars(‘变量名’,‘变量值’)或者$this->load->vars($变量)
4、视图尽量在静态网页的基础上进行开发,保存可维护性,推荐使用<?php foreach($list as $item)?>,<?=\$变量?>
超级对象
当期的控制器对象
属性
$this->load:装载器类的实例system/core/Loader.php
装载器提供的方法:
view()装载视图
vars()分配变量到视图
database()装载数据库操作对象
model()装载模型对象
helper()用于加载帮助
$this->uri:CI_URI,URL相关解析类的实例system/core/URI.php
CI_URI类提供的方法:
segment(第几段)分析URL,分段获取数据
入口文件.php/控制器/动作/参数1/参数2
两种获取方式:
1、echo \$this->uri->segment(3);//参数1
2、public function index($p=0){
echo $p;//参数1
}
$this->input:CI_Input类的实例system/core/Input.php
CI_Input类提供方法:
\$this->input->post('username');
\$this->input->server('DOCUMENT_ROOT');
在视图中,直接用$this来访问超级对象中的属性
数据库操作
修改配置文件:application/config/database.php
使用数据库之前需要装载数据库操作类
$this->load->database();通过参数修改操作数据库
装载成功后,会放入超级对象的属性中,默认属性名是db
$res=$this->db->query($sql)进行一次查询,查询语句为参数,返回一个对象。
$res->result();返回数组,里面是一个一个的对象
$res->result_array();返回二维数组,里面是关联数组
$res->row();返回第一条记录
$this->db->affected_rows();受影响行数
$this->db->insert_id();自增id
参数绑定
$sql=‘select * from blog_user where name=?’
$this->db->query($sql,$name);如果有多个问号时,需要传入一个索引数组
表前缀
$db[‘default’][‘dbprefix’]=‘blog_’
$db[‘default’][‘swap_pre’]=‘blog_’
配置为一样,代码中,直接硬编码表前缀就行了,如果以后项目数据库表前缀发生变化,只需要修改$db[‘default’][‘dbprefix’]=‘new_’;代码中的blog_会自动替换为new_
$res=$this->db->get(‘表名’);//返回结果集对象
$res->result();
$bool=$this->db->insert(‘表名’,‘关联数组’);
$bool=$this->db->update(‘表名’,关联数组,条件);
$bool=$this->db->delete(‘表名’,条件)
$this->db->last_query();显示最后一条sql语句
AR连贯操作
注意:where中id与比较符中必须有空格,where中需要多个条件时参数可以为关联数组。
$res=$this->db->where(array(‘name’=>‘mary’,‘id >’=>2))->get(‘user’);
更复杂的查询,建议使用
t
h
i
s
−
>
d
b
−
>
q
u
e
r
y
(
this->db->query(
this−>db−>query(sql,$data)
拓展CI控制器
CI中所有的控制器都需继承与CI控制器,我们可以从写CI控制器来实现功能,但我们不建议修改CI核心代码,这会无法通过更换system文件夹来升级CI控制器,所有拓展CI控制器通常新写一个自己的CI控制器继承与原CI控制器来实现。这个新文件会放到application下的core中。
继承新类编写构造方法会覆盖掉父类构造方法,所以应该首先调用父类构造方法。
自己的拓展控制器的前缀默认为MY_,这个前缀可以在config.php中修改。
$config[‘subclass_prefix’]=‘MY_’
模型
模型文件名应该全部小写,类名应该首字母应该大写。
建议模型名加上合适的后缀,以防与同名控制器混淆。
控制器不建议使用超级对象获得数据,获得数据的工作应当交给模型。
加载模型使用$this->load->model(模型名,别名)可以使用一个简单的别名。
加载模型后,会自动成为超级对象的属性。
url相关函数
在使用url相关函数时应该先加载$this->load->helper(‘url’)
site_url(‘控制器/方法’);
base_url()返回设定的ci根目录,在调用application同级文件夹下的文件时使用。