个人技术博客(α)

个人技术博客(α)

标签: 软工实践 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(路由控制)

三、控制器建立与访问

建立

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);

posted @ 2017-11-09 22:09  Skxz  阅读(286)  评论(2编辑  收藏  举报