0

0

CodeIgniter学习笔记 Item10--CI总结精华

黄舟

黄舟

发布时间:2016-12-29 10:40:12

|

1568人浏览过

|

来源于php中文网

原创

yii 

ci 

thinkphp 

zf

主要内容

ci简介

深入mvc设计模式

ci中控制器与视图

ci的超级对象

数据库访问

ar模型

如何扩展ci的控制器(登录验证)

模型

url相关函数

设置路由

隐藏入口文件

分页

文件上传

session

验证码

表单验证

ci是什么? 

codeigniter是一个轻量级但功能强大的php框架 

基于mvc设计模式,提供了一套丰富的类库 

简单易学,高效实用

官方网站

www.codeigniter.com

中文网站

http://codeigniter.org.cn

下载当前最新版本 

codeigniter_3.0.2.zip

有什么特点?

[code]你想要一个小巧的框架
你需要出色的性能
你需要广泛兼容标准主机上的各种 PHP 版本和配置
    CI 2.1.4 需要 PHP5.1.6
你想要一个几乎只需 0 配置的框架
你想要一个不需使用命令行的框架
你想要一个不需坚守限制性编码规则的框架
你不希望被迫学习一门模板语言(虽然可以选择你喜欢的模板解析器)
你不喜欢复杂,热爱简单
你需要清晰、完整的文档


目录结构说明 

license.txt 许可协议 

user_guide 用户手册 

system 框架核心文件 

application 应用目录 

index.php 入口文件

MVC 

1.入口文件 

唯一一个让浏览器直接请求的脚本文件 

2.控制器controller 

协调模型和视图 

3.模型model 

提供数据,保存数据 

4.视图view 

只负责显示 

表单… 

5.动作action 

是控制器中方法,用于被浏览器请求

CI中的MVC

访问url使用的是pathinfo

入口文件.php/控制器/动作

application目录中: 

controllers 控制器 

models 模型 

views 视图

默认控制器是welcome 

默认动作是index 

可以自定义方法,通过index.php/welcome/test来访问。

控制器

[code]1.不需要加后缀
2.文件名全部小写  例如 user.php
3.所有的控制器,直接或间接继承自CI_Controller类,为了避免重复,自己定义的类不要以CI开头
4.控制器中,对动作(方法)要求:
    public      /protected和private不能被浏览器请求,
    不能以_开头,在内部调用的可以这么用。
    方法名不区分大小写
    不要建立与控制器类名相同的方法,会被解析成构造方法,买一送一

视图

1.在控制器中如果加载视图

[code]//直接写视图名字,不写扩展名,如果有子目录,则写上目录名
        $this->load->view(视图);
        可以多次调用$this->load->view(视图);
[code]2.视图中,直接使用原生php代码

3.推荐使用


[code]        
        
        


超级对象

[code]当前的控制器对象 var_dump($this)
提供了很多属性:
$this->load   var_dump($this->load)
    装载器类的实例system/core/Loader.php
        CI会自动实例化一个CI_Loader对象,放在超级对象的属性中
        $obj = new CI_Loader();
        $this->load = $obj;
        $this->load->view('user/index');
    装载器类提供方法:
    view()      装载视图
    vars()      分配变量到视图
    database()  装载数据库操作对象 
    model()     装载模型对象
    helper()


$this->uri

[code]是CI_URI类的实例 system/core/URI.php
    CI_URI类提供方法:
    segment(n) 用于获取url中的第n个参数(值)

传统的:

入口文件.php/控制器/动作/参数1/值1/参数2/值2

[code]    入口文件.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

[code]输入类
    是CI_Input类的实例 system/core/Input.php
    CI_Input类提供方法:
    $this->input->post('username');//$_POST['username']
    $this->input->server('DOCUMENT_ROOT');//$_SERVER['DOCUMENT_ROOT']
在视图中,直接用$this来访问超级对象中的属性input->server('REMOTE_ADDR')?>


数据库访问

[code]修改配置文件
application/config/database.php
将数据库访问对象,装载到超级对象的属性中 $this->db
$this->load->database();
$res=$this->db->query($sql);//返回对象
$res->result();//返回数组,数组中是一个一个的对象$result->id
$res->result_array();//返回二维数组,里面是关联数组$result['id']
$res->row()//返回第一条数据,直接是一个对象
参数绑定
$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_
db的自动加载
    application/config/autoload.php
    $autoload['libraries'] = array('database');
    不需要:$this->load->database();
自增id
$this->db->insert_id();
受影响行数
$this->db->affected_rows();


Active Record

[code]1.application/config/database.php
    $active_record = TRUE;
2.application/config/autoload.php
    $autoload['libraries'] = array('database');
3.在配置文件中,配置表前缀后,会自动添加
$res=$this->db->get('表名');//返回结果集对象
$res->result();
$bool=$this->db->insert('表名',关联数组);
$bool=$this->db->update('表名',关联数组,条件);
$bool=$this->db->delete('表名',条件);
//select id,name from tableName where id>=3 order by id desc limit 2,3
$res=$this->db->select('id,name')
    ->from('user')
    ->where('id >=',3)
    ->limit(3,2)//跳过2条,取出3条数据
    ->order_by('id desc ')
    ->get();
//显示最近一条SQL
echo $this->db->last_query();
//where
//$res=$this->db->where('name','mary')->get('user');
//$res=$this->db->where('name !=','mary')->get('user');
//$res=$this->db->where(array('name'=>'mary'))->get('user');
//$res=$this->db->where(array('name'=>'mary','id >'=>2))->get('user');
复杂的查询,请用$this->db->query($sql,$data);//使用问号绑定参数

扩展CI控制器

AI Note
AI Note

AI Note 助手,像贴心女仆一样助力你的笔记!智能总结内容,精确划重点,提供专业建议,让学习与工作更高效。让你的笔记更清晰、有条理,知识尽在眼前!

下载
[code]application/core/MY_Controller.php
控制器就要以继承自MY_Controller
可以在自定义的控制器中扩展一些类。
application/config/config.php
$config['subclass_prefix'] = 'MY_';

模型

[code]继承自CI_Model
在模型中,可以直接使用超级对象中的属性
文件名,全小写
类名首字母大写
建议使用_model作为后缀,防和控制器类名冲突
控制器要什么数据,model就写一个方法,model提供数据。


url相关函数

[code]$this->load->helper('url');
//可以根需要配置自动加载
//application/config/autoload.php
//$autoload['helper'] = array('url');
site_url('控制器/方法')
base_url()//index.php的主入口。

路由

[code]application/config/routes.php
//默认控制器
$route['default_controller'] = "welcome";
//http://localhost/ci/index.php/news/201309/4.html
$route['news/[\d]{6}/([\d]+)\.html']='article/show/$1';


隐藏入口文件

[code]开始apache的rewrite模块,在httpd.conf文件中
LoadModule rewrite_module modules/mod_rewrite.so
重启apache
在入口文件同级目录中,放入一个.htaccess文件
内容如下:
    
       RewriteEngine on
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    

分页

[code]//装载类文件
$this->load->library('pagination');
$this->load->helper('url');
//每页显示10条数据
$page_size=10;
$config['base_url'] =site_url('user/test');
//一共有多少条数据
$config['total_rows'] = 100;
//每页显示条数
$config['per_page'] = $page_size; 
$config['first_link'] = '首页';
$config['next_link'] = '下一页';
$config['uri_segment']=3;//分页的数据查询偏移量在哪一段上
$this->pagination->initialize($config);
$offset=intval($this->uri->segment(3));//与$config['uri_segment']对应
$sql="select * from blog_user limit $offset, $page_size";
echo $sql;
$data['links']=$this->pagination->create_links();
$this->load->view('user/test',$data);


文件上传

[code]1.手动创建好上传目录
//上传目录需要手工创建 $config['upload_path']='./uploads/'; //允许 $config['allowed_types']='gif|png|jpg|jpeg'; $config['max_size'] = '10000'; //生成新文件名 $config['file_name']=uniqid(); //装载文件上传类 $this->load->library('upload',$config); $this->upload->do_upload('pic'); var_dump($this->upload->data()); //获取上传之后的数据 $data=$this->upload->data(); echo $data['file_name'];

验证码

[code]//生成一个随机不重复的字符串作为加密用的key
    //保存到application/config/config.php
    //$config['encryption_key'] = 'adb8bf6d0ac4e17b42a80941582497a4';
    //echo md5(uniqid());exit;
    $this->load->library('session');
    $user=array('id'=>3,'name'=>'jack');
    //session_start();
    //$_SESSION['user']=$user;
    $this->session->set_userdata('user',$user);
    //不在这这里获取刚放入的数据
    //只有页在从新加载或跳转到别的url中,才能获取到
    //一次性的数据,只能读取一次
    $this->session->set_flashdata('test','aaaaaaaaaaaaaa');
}
public function show_session(){
    $this->load->library('session');
    //取CI session中的数据
    $user=$this->session->userdata('user');
    var_dump($user);
    //下次刷新,就没有了
    $test=$this->session->flashdata('test');
    echo $test;
}

表单验证

[code]$this->load->library('form_validation');
    $this->form_validation->set_rules('name', '用户名', 'required');
    $this->form_validation->set_rules('email', '邮箱', 'valid_email');
    $bool=$this->form_validation->run();
    if($bool){
        //调用模型保存到数据库
    }else{
        //显示错误信息
        $this->load->view('user/add');
    }
    
    
name ','')?>
password
email
//生成一个随机不重复的字符串作为加密用的key //保存到application/config/config.php //$config['encryption_key'] = 'adb8bf6d0ac4e17b42a80941582497a4'; //echo md5(uniqid());exit; $this->load->library('session'); $user=array('id'=>3,'name'=>'jack'); //session_start(); //$_SESSION['user']=$user; $this->session->set_userdata('user',$user); //不在这这里获取刚放入的数据 //只有页在从新加载或跳转到别的url中,才能获取到 //一次性的数据,只能读取一次 $this->session->set_flashdata('test','aaaaaaaaaaaaaa'); } public function show_session(){ $this->load->library('session'); //取CI session中的数据 $user=$this->session->userdata('user'); var_dump($user); //下次刷新,就没有了 $test=$this->session->flashdata('test'); echo $test; } 表单验证 $this->load->library('form_validation'); $this->form_validation->set_rules('name', '用户名', 'required'); $this->form_validation->set_rules('email', '邮箱', 'valid_email'); $bool=$this->form_validation->run(); if($bool){ //调用模型保存到数据库 }else{ //显示错误信息 $this->load->view('user/add'); }
name ','')?>
password
email

最终user.php

[code]load->database();//可以传参,表示连接哪个数据库,在配置中配置多个数据库即可。
            //装载成功后,可以用$this->db;
            //var_dump($this->db);
            $sql = 'select * from users';
            $res = $this->db->query($sql);//msql_query();
            //var_dump($res);
            $users = $res->result();//返回对象数组;
            //echo "
";
            //var_dump($users);
            // mysql_fetch_assoc(result);//关联数组
            // mysql_fetch_object(result);//返回对象
            // 在页面中将数据带过去
            $data['user_list'] = $users;
            $this->load->view('user/showusers',$data);
        }
        public function add(){
            $this->load->database();
            $sql = "insert into users (id,name,password,age,sex) values (5,'xiao','34234',23,'男')";
            $bool = $this->db->query($sql);
            if($bool){
                //mysql_affected_rows();
                echo "受影响的行数:".$this->db->affected_rows();
                echo "自增id为:".$this->db->insert_id();
            }
        }
        public function insert(){
            $data['id'] = 6;
            $data['name'] = 'guo';
            $sql = "insert into users (id, name) values(?,?)";
            $bool = $this->db->query($sql,$data);
            if($bool){
                //mysql_affected_rows();
                echo "受影响的行数:".$this->db->affected_rows();
                echo "自增id为:".$this->db->insert_id();
            }
        }
        //AR模型简化操作
        public function get(){
            //查询
            // $res = $this->db->get('users');
            // foreach ($res->result() as $item) {
            //  echo $item->name;
            //  echo "
"; // } //增加 /*$data = array( 'id'=>8, 'name'=>'xiaoxiao', 'sex'=>'男' ); $bool = $this->db->insert('users',$data); var_dump($bool);*/ //改 /*$data = array( 'name'=>'果果', 'sex'=>'女', 'age'=>44 ); $bool = $this->db->update('users',$data,array('id'=>1)); var_dump($bool);*/ //删 // $bool = $this->db->delete('users',array('id'=>0)); // var_dump($bool); // select id, name, age,sex,from users where id <=5 order by id desc limit 2,3; $res = $this->db->select('id','name','age','sex') ->from('users') ->where('id <=5') ->order_by('id desc') ->limit(3,2) ->get(); var_dump($res->result()); } // private function _test(){ // echo "string"; // } public function index(){ //$this->_test(); // $this->load->view('user_index'); $list = array( array('id'=>1, 'name'=>'xiao', 'email'=>'xiao@gmail.com'), array('id'=>2, 'name'=>'guo', 'email'=>'guo@gmail.com'), array('id'=>3, 'name'=>'ping', 'email'=>'ping@gmail.com'), ); //标量分配,在视图中直接可以$title.获得变量 //$this->load->vars('title','这是标题'); $data['title'] = '这是标题'; //分配多个变量 $data['list'] = $list; //设置为了关联数组,$title和$list; $this->load->vars($data); $this->load->view('header'); $this->load->view('user/index'); echo $this->uri->segment(1); } // public function user(){ // echo "user控制器的user方法
"; // } // public function user2(){ // echo "user控制器的user2方法
"; // } public function model(){ //装载模型 // $this->load->model('User_model','user'); // //调用模型数据 // $list = $this->user->getAllUser(); // //视图显示 // $this->load->view('user/index2.php',array('list'=>$list)); //加载函数 $this->load->helper('url'); $this->load->view('user_index'); } public function submit(){ var_dump($this->input->post('name')); } // 文件上传类 public function file(){ $this->load->helper('url'); $this->load->view('user/file'); } public function upload(){ $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = '10000'; $config['file_name'] = uniqid(); $this->load->library('upload', $config); $this->upload->do_upload('pic'); $data = $this->upload->data(); echo $data['file_name']; //$this->upload->initialize($config); } public function init(){ // 生成一个随机不重复的字符串,用于加密 // 保存到$config['encryption_key'] // echo md5(uniqid());exit; $this->load->library('session'); $user = array('id'=>3,'name'=>'jack'); // session_start(); // $_session['user'] = $user; $this->session->set_userdata('user',$user); // 不在这里获取刚放入的数据,只有页面 // 在重新加载或跳转到别的页面时,才能获取 $this->session->set_flashdata('test','aaaaa'); } public function show_session(){ $this->load->library('session'); $user = $this->session->userdata('user'); var_dump($user); $test = $this->session->flashdata('test'); echo $test; } public function captcha(){ $this->load->helper('captcha'); $this->load->helper('url'); $vals = array( //'word' => rand(1000,9999), 'img_path' => './captcha/',//这个目录需要手工创建 'img_url' => base_url().'captcha/', 'img_width' => '150', 'img_height' => 30, 'expiration' => 5 ); $cap = create_captcha($vals); $this->load->view('user/captcha',array('cap'=>$cap['image'])); session_start(); $_SESSION['cap'] = $cap['word']; // 验证时,对比$_SESSION['cap'],可以不从服务器中读取 } } ?>

 以上就是CodeIgniter学习笔记 Item10--CI总结精华的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CodeIgniter3(CI3)基础教程(全)
CodeIgniter3(CI3)基础教程(全)

共37课时 | 4.7万人学习

Codeigniter 3 中文开发手册
Codeigniter 3 中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号