CodeIgniter框架
1、回忆MVC
1.1、M:模型,提供数据,保存数据
1.2、V:视图,只负责显示,表单form
1.3、C:控制器,协调模型和视图
1.4、action:动作,是控制器中的方法,用于被浏览器请求
2、CI中的MVC
CI简介:CodeIgniter是一个轻量级但功能强大的php框架,基于MVC的设计模式。提供了一套丰富的类库
2.1、访问的url使用的pathinfo
2.2、格式:入口文件/控制器/动作(默认pathinfo格式)
2.3、application目录:
Controllers控制器
Models模型
Views视图
2.4、默认的控制器是welcome
2.5、默认的动作是index
2.6、文件名全部小写
3、控制器(controller):
3.1、不需要加后缀,直接是类名.php
3.2、文件名全部小写,例如 user.php(大写的文件名浏览器不支持)
3.3、所有的控制器,直接或间接继承自CI_Controller类,类名首字母大写
3.4、方法名不区分大小写
动作要求:1.必须以public开头
2.不能以下划线(_)开头
注意!方法名与类名相同,会被php当做构造方法(__construct)
4、视图(view)
4.1、在控制器中加载视图:this->load->view(“user/add”);//不加扩展名
注意:可以多次调用this->load->vars(“视图中变量名”,php中变量名);
例如:this->load->vars(“str”,str;?>
4.5、在控制器中分配多个变量:
例如:list = array(“id”=>”1”,”name”=>”zhangsan”,”pwd”=>”1234”);
str;
list;
data);
4.6、CI框架会自己解决php中的短标签<?=…?>
4.7、推荐使用:<?phpforeach(key=>$val):?>…<?php endforeach;?>
5、超级对象:当前控制器对象,提供了很多属性
5.1、this->load->view()装载视图
this->load->database()装载数据库操作对象
this->load->helper()帮助对象
变量名)装载视图时分配变量
5.2、this->uri->Segment(n)用于获取URL中的第n个参数
控制器代表1,动作代表2,值1代表3,值2代表为4…
用法1:入口文件/控制器/动作/值1/值2
echo id=0){
echo $id;//输出6
}
5.3、$this->input属性
5.3.1、装载器类的实例 system/core/Input.php
5.3.2、CI_Input提供的方法:
_POST[“username”];
_SERVER[“DOCUMENT_ROOT”]
this->input->server(“SERVER_ADDR”);//服务器端IP
注意:在视图中,可以直接用$this来访问超级对象中的属性
6、访问数据库
6.1、修改配置文件:application/config/database.php
6.2、装载数据库操作类:this->db
6.3、this->db->query(sql = sql);//显示最后一条执行的sql语句
6.3.1、this->db->escape();//此函数会确定数据类型,对字符串类型数据转义
6.4、query->result();//返回数组,数组中是一个一个的对象
6.5、query->result_array();//返回二维数组,里面是关联数组
6.6、query->row();//返回第一条数据,直接是一个对象
6.7、query->row_array();//返回第一条数据,是一个数组
6.8、query->num_rows();//返回结果集的行数
6.9、query->num_fields();//返回请求的字段数
6.10、query->affected_rows();//返回受影响的行数
6.11、query->insert_id();//返回自增ID
7、数据库中的配置
7.1、自动加载db:
在application/config/autoload.php中配置:
this->load->database();
7.2、参数绑定
this->input->post(“name”);
this->input->post(“pwd”);
//使用问号绑定参数
name;
pwd;//用二维数组传递值
bool = sql,db[‘default’][‘dbprefix’]=‘ci_’;
db[‘default’][‘dbprefix’]=‘new_’,代码中ci_会自动替换为new_
8、数据库操作(AR模型)
8.1、配置application/cinfig/database.php中
res = list = list = data[“数据库字段名”]=值;//data[“数据库字段名”]=值;
this->db->insert(“数据表名”,data[“数据库字段名”]=值;//data[“数据库字段名”]=值;
res = data,where = array(“id”=>”4”);
this->db->dalete(“数据表名”, $where);//返回结果boolean;
9、AR的连贯操作
9.1、this->db->select("id,name")//查找的字段
->from("user")//数据表名
->where("id >",3)//条件 id与>之间必须要有空格
->order_by("id desc")//排序
->limit(3,1)//分页;表示跳过1条,取3条,与tp相反
->get();//获取数据
res->result_array();
9.2、where()条件
条件符:“>”、“>=”、“<”、“<=”、“=”、“!=“;不指定条件付默认是”=“
1、只有单个条件时:
9.2.1、this->db->where(“字段”,”值”)->get();
例如:this->db->where(“name”,”admin”)->get();//自动会加上“=”
9.2.2、this->db->where(“字段=”,”值”)->get();
例如:this->db->where(“name=”,”admin”)->get();//必须要有空格
2、有多个条件时:用array()
9.2.3、this->db->where(array(“字段”=>”值”,“字段”=>”值”))->get();
例如:this->db->where(array(“name”=>”admin”,“id>3”=>”2”))->get();
9.2.4、复杂的查询语句使用sql,this->db->select(“字段”)
->from(“数据表名”)
->join('连接表','连接条件')
->get(); //默认为左查询(left join … on) 例如:
this->db->select(“*”)
->from(“user”)
->join(“category”, “user.id = category.id”,”left”)//通过第三个参数指定
->get();
10、扩展CI控制器
10.1、扩展控制器
1、在application/core新建一个自己的控制器(MY_Controller),新建的控制器继承CI_Controller类,可以从自己创建的控制器中进行扩展。
例如:class MY_Controller extends CI_Controller{
Public function __consreuct(){
Parent::__construct(); //调用父类的构造方法
//登陆验证
//权限验证
}
}
2、让welcome.php继承自己创建的控制器(MY_Controller),间接继承CI_Controller。
3、控制器前缀可以修改
在application/config/config.php中修改:
this->load->model(“模型文件名”); //不加后缀
11.5、控制器中加载模型时起别名:this->模型文件名->方法名();
例如:this->User_model->getAll(); //调用模型,获取数据
11.6.1、控制器中调用模型,获取数据:this->load->model(“User_model”,”user”); //注意大小写
this->load->helper(“url”);
配置自动加载辅助函数:在application/config/autoload.php中配置
this->load->helper(“url”);
辅助函数:
site_url(“控制器/动作/参数”) ; //处理url及参数
在视图中使用<?php echo site_url(“控制器/动作/参数”)?>
base_url();//返回网站的根目录(“ci/”);
13、CI中的路由与伪静态、隐藏index.php入口文件
13.1、路由设置
在application/config/routes.php中设置/修改:
$route['default_controller'] = "welcome"; //默认的控制器为welcome
13.2、伪静态设置
在application/config/routes.php中设置/修改:
//正则匹配(控制器/)
1';
http://localhost/CI/index.php/news/201401/caolizhi66.html
将动作news中的参数路由到user/show/$1
13.3、隐藏入口文件index.php
13.3.1、开启apache配置文件:LoadModule rewrite_module modules/mod_rewrite.so
13.3.2、在入口文件统计目录中,创建一个.htaccess文件,内容如下:
<IFModule mod_rewrite.c>
RewriteEngine on //启用伪静态
RewriteCond %{REQUEST_FILENAME} !-d //匹配不存在的目录
RewriteCond %{REQUEST_FILENAME} !-f //匹配不存在的文件
RewriteRule ^(.*)1 [QSA,PT,L] //重写规则
</IFModule>
这样就不用写入口文件index.php了
14、CI中的分页
config['base_url'] = config['total_rows'] = config['per_page'] = config['page_query_string'] = TRUE;
9 /传参形式。开启true则会自动在你的url后面加上&per_page=3。(这个per_page是默认的查询字符,当然你也可以用config['first_link'] = '首页'; // 第一页显示
13 config['next_link'] = '下一页>'; // 下一页显示
15 config['cur_tag_open'] = '<aclass="current">'; // 当前页开始样式
17 config['num_links'] = 2;//当前连接前后显示页码个数。意思就是说你当前页是第5页,那么你可以看到3、4、5、6、7页。
22 config['use_page_numbers']= TRUE;
27/这个就是a)、b)的差别了。开启了,page就会表示页数。false就会表示记录数