CI是什么?
codeIgniter 是一个轻量级但功能强大的PHP框架,基于MVC设计模式,提供的一套丰富的类库。
简单易学,高效实用。
官方网站
中文网站
最新版本
CodeIgniter-3.0.6.zip
有什么特点?
你想要一个小巧的框架
你需要出色的性能
你需要广泛兼容标准主机上的各种PHP版本和配置(PHP 版本 5.1.6)
你想要一个几乎只需 0 配置的框架
你想要一个不需要使用命令行的框架
你想要一个不需要坚守限制性编码规则的框架
你不希望被迫学习一门模板语言
你不喜欢复杂、热爱简单
你需要清晰、完整的文档
目录结构说明
license.txt | 许可协议 |
user_guide | 用户手册 |
system | 框架核心文件 |
application | 应用目录 |
index.php | 入口文件 |
MVC
1. 入口文件
唯一一个让浏览器直接请求的脚本文件
1. 控制 contorller
负责调度模型和视图
1. 模型 model
和数据库打交道,提供数据,保存数据
1. 视图 view
只负责显示
1. 动作 action
是控制器中方法,用于被浏览器请求
CI中的MVC
访问url使用的是pathinfo的模式
入口文件.php/控制器/方法/参数值
Application 目录中:
Controllers | 控制器 |
Models | 模型 |
Views | 视图 |
默认控制器:welcome
默认方法:index
控制器
1. 不需要加后缀
2. 文件名全部小写,例如:user.php
3. 所有的控制器,直接或间接继承自CI_Controller类
4. 控制器中,对方法要求:
1. Public
2. 不能以_开发
视图
1. 在控制器中如果加载视图
1. 直接写视图名字,不写扩展名,如果有子目录,则写上目录名,
$this->load->view(视图); // 可以多次调用
1. 视图中,直接使用原生PHP代码
2. 推荐使用
<?php foreach($list as $item):?>
<?=$item['name']?>
<?php endforeach; ?>
超级对象
即:当前的控制器对象,提供了很多属性:
$this->load
装载器类的实例, system/core/loader.php
提供的方法有:
view() | 装载视图 |
vars() | 分配变量到视图 |
database() | 装载数据库操作对象 |
model() | 装载数据库操作对象 |
helper() |
|
$this->uri
是CI_URI类的实例, system/core/URI.php
CI_URI类提供的方法:
segment(n) | 获取URL中第n个参数值 |
传统的:入口文件.php/控制器/方法/参数1/值1/参数2/值2
CI中的:入口文件.php/控制器/方法/值1/值2
echo $this->segment(3); | 值1 |
echo $this->segment(4); | 值2 |
例子://index.php/控制器/index/6
Public function index($p=0)
{
echo $p;// 输出6
}
$this->input
输入类
是CI_Input类的实例, system/core/Input.php
CI_Input类提供的方法:
$this->input->post('username'); |
|
$this->input->server('DOCMENT_ROOT'); $this->input->cookie('token'); |
|
注:在视图中,也可以用$this来访问超级对象中的属性
数据库访问
修改配置文件:
Application/config/database.php
将数据库访问对象装载到超级对象的属性中 $this->db
$this->load->database();
$res = $this->db->query($sql); | 返回对象 |
$res->result(); | 返回数组(数组中是一个个的对象) |
$res->result_array(); | 返回二维数组(里面是关联数组) |
$res->row() | 返回第一条数据(是一个对象) |
表前缀
$db['default']['dbprefix'] = 'blog_';
$db['default']['swap_pre'] = 'blog_';
解:swap_pre配置会把硬编码中表前缀,替换为dbprefix。
DB的自动加载
Application/config/autoload.php
$autoload['libraries'] = array('database');
注:配置表前缀后,会自动加载
判断条件:
$this->db->insert_id(); | 自增ID |
$this->db->affected_row(); | 受影响行数 |
Active Record
开启AR
1. Application/config/database.php
$active_record = TRUE; | 旧版本 |
$query_builder = TRUE; | 新版本(3.0.1) |
1. 常用操作
查询 |
|
$res = $this->db->get('表名'); | 返回结果集对象 |
$res->result(); |
|
新增 |
|
$this->db->insert('表名',关联数组) | 返回布尔 |
修改 |
|
$this->db->update('表名',关联数据,条件); | 返回波尔 |
删除 |
|
$this->db->delete('表名',条件); | 返回布尔 |
1. 连贯操作
// SELECT uid,user FROM user WHERE uid > 2 LIMIT 2,3 ORDER BY uid ASC
构造一个如上SQL的连贯写法:
$res = $this->db->select('id,user')
->from('user')
->where('id >',2)
->limit(3,2)
->order_by('id ASC')
->get();
// 获取最近的执行的SQL语句
echo $this->db->last_query();
// where 的用法
条件 | 结果 |
->wher('name','张三')->get() | WHERE `name`='张三' |
->where('name !=','张三')->get() | WHERE `name`!='张三' |
->where(array('name'=>'lisi'))->get() | WHERE `name`='lisi' |
->where(array('name'=>'lisi','id >'=>2))->get() | WHERE `name`='lisi' AND id>2 |
复杂的查询,请用$this->db->query($sql,$data); // 使用问号绑定参数
扩展CI控制器
Application/core/MY_Controller.php
控制器就要以继承自MY_Controller
Application/config/config.php
$config['subclass_prefix'] = 'MY_';
模型
继承自CI_Model
在模型中,可以直接使用超级对象中的属性
文件名,全小写
类名,首字母大写
建议使用_model作为后缀,防止和控制类名冲突
Model文件:user_model.php
CI 验证码报错
mcrypt_create_iv() MCRYPT_DEV_URANDOM ------> MCRYPT_RAND
509学一个新框架的步骤
1 入口文件,目录结构,配置
2 mvc 路由
3 curd
4 类库 函数库
5 封装类库 封装函数库