CI学习笔记
1.
2
3.模型:提供数据,保存数据
4.视图view:只负责显示
5.动作action:是控制器中的方法,用于浏览器请求
6.CI中的mvc:
访问url使用的是pathinfo模式;如:入口文件.php/控制器/动作;
application目录中
controllers 控制器,默认控制器是welcome,默认动作是index
models 模型
views 视图
控制器:
1)不要加后缀
2)文件名全部小写
3)所有的控制器,直接或间接的继承CI_Controller类
4)动作要求只有public方法,不能以下划线开头才能进行访问,与类名相同的是构造方法
视图:
1.加载视图:this->load->view('')加载视图,一般视图命名都是控制器名+控制器中的方法名,但是为了区分开各类视图,
所以像user的文件都放在user文件夹,news的文件都放在news的文件夹,加载视图时也就成了加载子目录中的视图 控制器名/控制器中的方法名
2.直接使用原生PHP代码
模型:
1.一个模型加载好,自动成为超级对象的属性
7.一些内置函数
$this->load->vars('title','这是标题')是分配变量函数,类似smarty中的assign;
推荐使用短标签,不使用花括号
8.CI超级对象中的URI
超级对象有这些:当前的控制器对象
提供了很多属性
$this->load
装载器类的实例:system/core/loader.php
装载器类的提供方法:
view()装载视图
vars()分配变量到视图
database()装载数据库操作对象,装载成功后会放入超级对象的属性中,默认属性名是db,var_dump($this->db);
$this->db->query返回的是对象==mysql_query
helper()
$this->uri是CI_URI的一个实例:system/core/URI.php
CI_URI类提供的方法:
分段获取,$this->uri->segment();获取对数,就是pathinfo模式的;获取url的参数
传统的pathinfo模式
入口文件.php/控制器/动作/参数1/值1/参数2/值2
而ci是这样的
入口文件.php/控制器/动作/值1/值2
$this->input
是CI_INPUT中的实例,system/core/input.php
$this->input->post('')
$this->input->没有get,因为get是分段取了
$this->input->server
在视图中也可以直接$this超级对象的属性
9.数据库操作
数据库访问:修改配置文件:application/config/database.php
操作数据库访问对象。装载到超级对象属性中的$this->db
$this->load->database();
$res=$this->db->query($sql)返回对象
$res->result()返回数组,里面是一个一个的对象
$res->result_array()返回二维数组,里面是关联数组
$res->row()//返回的是第一条数据,直接是一个对象
$this->db->affected_rows()返回受影响行数
$this->db->insert_id()返回插入号
autoload文件里修改这些
参数绑定:$sql='select * from blog_user where name=?';
$this->db->query($sql,$name);//如果有多个问号时,需要传入一个索引数组
表前缀:$db['default']['swap_pre']='要设的前缀';
$db['default']['dbprefix']='要设的前缀';
配置为一样,代码中,直接硬编码表前缀就行了,如果以后项目数据表前缀发生变化,只需要修改$db['default']['dbprefix']='新表前缀'
就行,代码中会自动修改
db的自动加载
1、application/config/database.php,将$active_record=TRUE
2.在配置文件中配置表前缀会自动添加:$this->db->get('表名')//返回结果集对
3.$this->db->insert()可以向表中插入数据
4.$this->db->update(表名,$data是要更新数据的数组,array('id'=>3))更新id=3的记录
5.AR连贯操作
$this->db_select('id','name')
->from('user')
->where('id>=',3)
->limit(2,3)//这里是跳过三条取两条,这和普通sql是相反的
->order_by('id desc')
->get();获取数据
6.$this->db->last_query()是显示的最后一次执行的sql语句
复杂的查询,使用$this->db_query($sql,$data),使用问号绑定参数
10.url相关函数
$this->load->helper('url');
//可以通过配置自动加载,在application/config/autoload.php中,加入$autoload['helper']=array('url')
site_url('控制器/方法')函数:比如提交表单时,返回以config.php中指定的base_url和index_page还有传递给函数的uri段参数拼接成的字符串antion=site_url('控制器/方法')
base_url()函数:是网站的根目录,
11.路由与伪静态
配置文件application/config/routes.php中,
//默认路由
$route['default_controller']='welcome'
正则中把.html通过替换掉
htaccess是apache的重写规则,把其放在根目录,然后开启apache重写功能就可以
一个样例:
<IfModule mod_rewrite.c>
ReWriteEngine on
ReWriteCond %[REQUEST_FILENAME] !-d
ReWriteCond %[REQUEST_FILENAME] !-f
ReWriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
12.CI中的分页类
首先载入分页类$this->load->library('pagination')
载入url类$this->load->helper('url');
//获得基础路径,获得路径之前要载入url类
//基础路径是在分页的时候用的
$config['base_url']=site_url('控制器/方法');
$config['uri_segment']=页码在第几段
$config['total_rows']=//总记录条数
$config['per_page']=//每页显示的数目
$config['first_link']='首页'
$config['next_link']='下一页'
$config['prev_link']='上一页'
//偏移量要在url地址段中获取,由于ci的分页类比较特殊,显示的是跳过的条数
通过
$offset=intval($this->uri->segment('第几段是跳过的条数'))
$this->pagination->initialize($config);
$data['links']= $this->pagination->create_links();
$this->load->view('视图名',$data)
13.ci中的文件上传
//定义上传路径
$config['upload_path']=
//上传类型
$config['upload_types']=''
//最大限制
$config['max_size']
//给上传的文件命名
$config['file_name']=,如uniqid()
$this->load->library('upload',$config);
$this->upload->do_upload('表单名字')
$this->upload->data()方法是获取文件上传后的数据
14.CI中的session
默认不适用php原生session,会借助cookie机制;
//要生成一个随机不重复的字符串作为默认加密用的key,保存到application/config/config.php里的$config['encryption_key'] = '';
$this->load->library('session')
$user=array('id'=>3,'name'=>'sgd');
$this->session->set_userdata('user',$user)
只有页面重新加载或者转到别的url中,才能获取到刚才放入的数据
//取session中的数据
$this->session->userdata()
//如果不想在cookie中暴漏数据,可以在application/config/config.php中将config['sess_encrypt_cookie']='true'即可
$this->session->flashdata()是一次性闪存session,再刷新就会被ci自动销毁
15.CI中的验证码
第一步还是先加载
$this->load->helper('captcha')
$this->load->helper('url')
$varl=array(
'word'=>rand(1000,9999),
'img_path'=>'./captcha/',//此目录需要手动创建
'img_url'=>base_url.'/captcha/',
'img_width'=>'',
'img_height'=>'',
'expiration'=>'',//这里是验证码图片在文件夹中保存几秒,下次生成便会删除前几次的图片
);
//创建验证码
$cap=create_captcha($varl);
$cap['image']是验证码图片,而$cap['word']是验证码内容,将其放入$_SESSION中就可以
//将验证码放在视图中
$this->load0>view('放在的视图',array('cap'=>$cap['image']));
16.CI中的表单验证
前面加上echo validation_errors()来防止浏览器不支持js时报错
//加载表单验证库
$this->load->library('form_valiadtion')
$this->form_validation->set_rules('name','用户名','required'),格式就是这样,required是必填,valid_email是合法邮箱
$bool=$this->form_valiadtion->run()//自动验证,成功返回true,失败返回false
if($bool)
{//调用模型,保存到数据库}
else
{//返回name的错误信息
echo form_error('name','<span>',</span>)
$this->load->view('重新加载视图');
}
表单中value="<?php echo set_value('name')?>"设置提示
修改语言包可以换成中文的报错
1.
2
3.模型:提供数据,保存数据
4.视图view:只负责显示
5.动作action:是控制器中的方法,用于浏览器请求
6.CI中的mvc:
访问url使用的是pathinfo模式;如:入口文件.php/控制器/动作;
application目录中
controllers 控制器,默认控制器是welcome,默认动作是index
models 模型
views 视图
控制器:
1)不要加后缀
2)文件名全部小写
3)所有的控制器,直接或间接的继承CI_Controller类
4)动作要求只有public方法,不能以下划线开头才能进行访问,与类名相同的是构造方法
视图:
1.加载视图:this->load->view('')加载视图,一般视图命名都是控制器名+控制器中的方法名,但是为了区分开各类视图,
所以像user的文件都放在user文件夹,news的文件都放在news的文件夹,加载视图时也就成了加载子目录中的视图 控制器名/控制器中的方法名
2.直接使用原生PHP代码
模型:
1.一个模型加载好,自动成为超级对象的属性
7.一些内置函数
$this->load->vars('title','这是标题')是分配变量函数,类似smarty中的assign;
推荐使用短标签,不使用花括号
8.CI超级对象中的URI
超级对象有这些:当前的控制器对象
提供了很多属性
$this->load
装载器类的实例:system/core/loader.php
装载器类的提供方法:
view()装载视图
vars()分配变量到视图
database()装载数据库操作对象,装载成功后会放入超级对象的属性中,默认属性名是db,var_dump($this->db);
$this->db->query返回的是对象==mysql_query
helper()
$this->uri是CI_URI的一个实例:system/core/URI.php
CI_URI类提供的方法:
分段获取,$this->uri->segment();获取对数,就是pathinfo模式的;获取url的参数
传统的pathinfo模式
入口文件.php/控制器/动作/参数1/值1/参数2/值2
而ci是这样的
入口文件.php/控制器/动作/值1/值2
$this->input
是CI_INPUT中的实例,system/core/input.php
$this->input->post('')
$this->input->没有get,因为get是分段取了
$this->input->server
在视图中也可以直接$this超级对象的属性
9.数据库操作
数据库访问:修改配置文件:application/config/database.php
操作数据库访问对象。装载到超级对象属性中的$this->db
$this->load->database();
$res=$this->db->query($sql)返回对象
$res->result()返回数组,里面是一个一个的对象
$res->result_array()返回二维数组,里面是关联数组
$res->row()//返回的是第一条数据,直接是一个对象
$this->db->affected_rows()返回受影响行数
$this->db->insert_id()返回插入号
autoload文件里修改这些
参数绑定:$sql='select * from blog_user where name=?';
$this->db->query($sql,$name);//如果有多个问号时,需要传入一个索引数组
表前缀:$db['default']['swap_pre']='要设的前缀';
$db['default']['dbprefix']='要设的前缀';
配置为一样,代码中,直接硬编码表前缀就行了,如果以后项目数据表前缀发生变化,只需要修改$db['default']['dbprefix']='新表前缀'
就行,代码中会自动修改
db的自动加载
1、application/config/database.php,将$active_record=TRUE
2.在配置文件中配置表前缀会自动添加:$this->db->get('表名')//返回结果集对
3.$this->db->insert()可以向表中插入数据
4.$this->db->update(表名,$data是要更新数据的数组,array('id'=>3))更新id=3的记录
5.AR连贯操作
$this->db_select('id','name')
->from('user')
->where('id>=',3)
->limit(2,3)//这里是跳过三条取两条,这和普通sql是相反的
->order_by('id desc')
->get();获取数据
6.$this->db->last_query()是显示的最后一次执行的sql语句
复杂的查询,使用$this->db_query($sql,$data),使用问号绑定参数
10.url相关函数
$this->load->helper('url');
//可以通过配置自动加载,在application/config/autoload.php中,加入$autoload['helper']=array('url')
site_url('控制器/方法')函数:比如提交表单时,返回以config.php中指定的base_url和index_page还有传递给函数的uri段参数拼接成的字符串antion=site_url('控制器/方法')
base_url()函数:是网站的根目录,
11.路由与伪静态
配置文件application/config/routes.php中,
//默认路由
$route['default_controller']='welcome'
正则中把.html通过替换掉
htaccess是apache的重写规则,把其放在根目录,然后开启apache重写功能就可以
一个样例:
<IfModule mod_rewrite.c>
ReWriteEngine on
ReWriteCond %[REQUEST_FILENAME] !-d
ReWriteCond %[REQUEST_FILENAME] !-f
ReWriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
12.CI中的分页类
首先载入分页类$this->load->library('pagination')
载入url类$this->load->helper('url');
//获得基础路径,获得路径之前要载入url类
//基础路径是在分页的时候用的
$config['base_url']=site_url('控制器/方法');
$config['uri_segment']=页码在第几段
$config['total_rows']=//总记录条数
$config['per_page']=//每页显示的数目
$config['first_link']='首页'
$config['next_link']='下一页'
$config['prev_link']='上一页'
//偏移量要在url地址段中获取,由于ci的分页类比较特殊,显示的是跳过的条数
通过
$offset=intval($this->uri->segment('第几段是跳过的条数'))
$this->pagination->initialize($config);
$data['links']= $this->pagination->create_links();
$this->load->view('视图名',$data)
13.ci中的文件上传
//定义上传路径
$config['upload_path']=
//上传类型
$config['upload_types']=''
//最大限制
$config['max_size']
//给上传的文件命名
$config['file_name']=,如uniqid()
$this->load->library('upload',$config);
$this->upload->do_upload('表单名字')
$this->upload->data()方法是获取文件上传后的数据
14.CI中的session
默认不适用php原生session,会借助cookie机制;
//要生成一个随机不重复的字符串作为默认加密用的key,保存到application/config/config.php里的$config['encryption_key'] = '';
$this->load->library('session')
$user=array('id'=>3,'name'=>'sgd');
$this->session->set_userdata('user',$user)
只有页面重新加载或者转到别的url中,才能获取到刚才放入的数据
//取session中的数据
$this->session->userdata()
//如果不想在cookie中暴漏数据,可以在application/config/config.php中将config['sess_encrypt_cookie']='true'即可
$this->session->flashdata()是一次性闪存session,再刷新就会被ci自动销毁
15.CI中的验证码
第一步还是先加载
$this->load->helper('captcha')
$this->load->helper('url')
$varl=array(
'word'=>rand(1000,9999),
'img_path'=>'./captcha/',//此目录需要手动创建
'img_url'=>base_url.'/captcha/',
'img_width'=>'',
'img_height'=>'',
'expiration'=>'',//这里是验证码图片在文件夹中保存几秒,下次生成便会删除前几次的图片
);
//创建验证码
$cap=create_captcha($varl);
$cap['image']是验证码图片,而$cap['word']是验证码内容,将其放入$_SESSION中就可以
//将验证码放在视图中
$this->load0>view('放在的视图',array('cap'=>$cap['image']));
16.CI中的表单验证
前面加上echo validation_errors()来防止浏览器不支持js时报错
//加载表单验证库
$this->load->library('form_valiadtion')
$this->form_validation->set_rules('name','用户名','required'),格式就是这样,required是必填,valid_email是合法邮箱
$bool=$this->form_valiadtion->run()//自动验证,成功返回true,失败返回false
if($bool)
{//调用模型,保存到数据库}
else
{//返回name的错误信息
echo form_error('name','<span>',</span>)
$this->load->view('重新加载视图');
}
表单中value="<?php echo set_value('name')?>"设置提示
修改语言包可以换成中文的报错