个人技术博客(α)
个人技术博客(α)
标签: 软工实践 PHP CI
CodeIgniter(CI)框架学习
CI框架学习的小结,做了点微不足道的工作。
简要目录
一、框架介绍
二、框架目录结构
三、控制器建立与访问
四、载入视图
五、辅助函数与自定义函数
六、表单验证
七、定义使用模型及配置数据库
八、AR类操作数据库
九、图片上传和缩略图
十、分页类使用
一、框架介绍
CodeIgniter是一套给PHP网站开发者使用的应用程序开发框架和工具包,其具有以下特点
- 轻量、快速、功能强大
- 基于M-V-C模型
- 生成简洁的URL
- 扩展性强
- 不需要模板引擎,性能最大化
- 拥有一个友好的中文用户社区
M-V-C关系导图
二、框架目录结构
仅列出常用目录
- CI(项目根目录)
- application(应用)
- config(配置)
- controllers(控制器)
- models(模型)
- views(视图)
- system(系统)
- core
- Common.php(自定义函数)
- Router.php(路由控制)
- core
- application(应用)
三、控制器建立与访问
建立
class Home extends CI_Controller {
//默认显示函数
public function index() {
echo 'success!';
}
}
访问
通过url访问:.../index.php/home/index
index.php
:单入口
home
:控制器名
index
:方法名,若为空则默认为index
四、载入视图
载入
在控制器中
//传入视图的数据
$data = 'data';
//file_name为视图文件名(.php后缀可省略)
$this->load->view('folder_name/file_name', $data);
在视图中处理分配的数据
<?php foreach($data as $v): ?>
<li><?php echo $v ?></li>
<?php endforeach ?>
五、辅助函数与自定义函数
辅助函数
1.system/helpers或application/helpers文件夹
2.application/helpers优先级高于system/helpers
手动载入
在控制器中
//name为辅助函数名
$this->load->helper('name');
自动载入
在application/config/autoload.php中修改语句进行配置
$autoload['helper'] = array('name');
url辅助函数
前提:载入url辅助函数
site_url()
获得url参数路径base_url()
获得根路径redirect()
跳转
site_url()
和base_url()
可传递参数,得到参数与获得路径的连接,即site_url('url')
与 site_url() . 'url'
等价
扩展自定义函数
在system/core/Common.php下,添加自定义函数代码段,自动全局加载
//自定义格式化打印函数
fuction p($arr) {
echo '<pre>';
print_r($arr);
echo '</pre>';
}
六、表单验证
载入验证类
$this->load->library('form_validation');
设置规则
$this->form_validation->set_rules('name值','标签名称','规则');
执行验证(返回bool值)
$this->form_validation->run();
表单验证辅助函数
set_value('name')
重填数据,保留未通过验证的数据form_error('name', '<span>', '</span>')
显示错误set_select()
保留选择情况set_checkbox()
保留选择情况set_radio()
保留选择情况
创建通用表单验证
在application/config下新建form_validation.php,添加如下代码
<?php
$config = array(
'form1' => array(
'field' => '',
'label' => '',
'rules' => ''
),
'form2' => array(
'field' => '',
'label' => '',
'rules' => ''
),
...
)
?>
在控制器中调用
//返回bool值
$status = $this->form_validation->run('form1');
七、定义使用模型及配置数据库
模型定义
在application/model下新建modeltest_model.php
class Modeltest_model extends CI_Model {
//测试函数
public function test() {
...
}
}
模型使用
在控制器中
//载入模型
this->load->model('modeltest_model', 'test');
//使用模型中方法
this->test->test();
配置数据库
本地建立数据库后,在application/config/database.php中进行配置
$active_group = 'default'; //多个数据库时配置
$query_builder = TRUE; //TRUE为继承AR模型
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost', //主机名称
'username' => '', //用户名
'password' => '', //用户密码
'database' => '', //数据库名
'dbdriver' => '', //驱动(数据库类型)
'dbprefix' => '', //前缀
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
在application/config/autoload.php中修改该语句进行配置,使数据库自动加载
$autoload['libraries'] = array('database');
调试模式
开启调试模式
$this->output->enable_profiler(TRUE);
八、AR类操作数据库
在模型中使用AR类对数据库进行操作
插入
//插入的数据,采用数组格式(键名=>键值)
$data = array (
//使用输入类获得数据
'name' => this->input->post('name')
);
$this->db->insert('table_name', $data);
查询
//全表查询,返回一个数组
$data = $this->db->get('table_name')->result_array();
//关联表查询
//使用join关联表,传入参数:关联表名、条件
//使用order_by对结果进行排序,传入参数:排序项、升降序
$data = $this->db->select('name')->from('table1_name')->join('table2_name', 'table1_name.id=table2_name.id')->order_by('id', 'asc')->get()->result_array();
//条件查询,where传入参数条件数组(键名=>键值)
$data = $this->db->where(array('name'=>$name))->get('table_name')->result_array();
修改
//update传入三个参数:表名,数据,条件
$this->db->update('table_name', $data, array('name'=>$name));
删除
//delete传入两个参数:表名,条件
$this->db->delete('table_name', array('name'=>$name))
九、图片上传和缩略图
图片上传
在控制器中先进行上传配置
$config[`upload_path`] = ''; //文件路径(本地)
$config[`allowed_typ`] = ''; //允许上传类型
$config['max_size'] = ''; //最大容量
$config['max_width'] = ''; //最大宽度
$config['max_height'] = ''; //最大高度
$config['file_name'] = time() . mt_rand(1000, 9999); //文件名,随机命名可防止文件覆盖
载入上传类
//$config为上传配置
$this->load->library(upload, $config);
上传
//name为文件表单名,返回bool值(上传情况)
$status = $this->upload->do_upload('name');
返回信息
$info = $this->upload->data();
缩略图
配置
$arr['source_image'] = $info['full_path']; //源图片路径,从上传图片的info中获得
$arr['create_thumb'] = FALSE; //创建预览图像
$arr['maintain_ratio'] = TRUE; //保持纵横比
$arr['width'] = 200; //宽度
$arr['height'] = 200; //高度
载入缩略图类
$this->load->library('image_lib');
执行缩放动作
//返回bool值
$status = $this->image_lib->resize();
十、分页类使用
在控制器中,载入分页类
$this->load->library('pagination');
配置
$perPage = 3; //定义每页条数
$config['base_url'] = ''; //分类页地址
$config['total_rows'] = ''; //总行数
$config['per_page'] = $perPage;
$config['uri_segment'] = 4; //偏移量
//自定义分页配置
$config['first_link'] = '第一页';
$config['prev_link'] = '上一页';
$config['next_link'] = '下一页';
$config['last_link'] = '最后一页';
$this->pagination->initialize($config); //载入配置
创建分页链接
$data['links'] = $this->pagination->create_links();
数据库操作
//使用辅助函数获取偏移量
$offset = $this->uri->segment(4);
//对数据库进行limit操作
$this->db->limit($perPage, $offset);
完