PHP CI笔记
控制器
- 访问:入口文件.php/控制器/方法
- 所有的控制器 直接或间接继承CI_Controller类
- 私有方法或者属性 可以用private声明或者前面加下划线 如:_user 则该方法不能被访问
视图
-
$this->load->view(视图,$data);//默认加载views里的php 文件,不写后缀,第二个参数为php里用到的数据,可选,多个数据应用数组保存
-
推荐使用
1
2
3foreach(\$list as \$item): php
$item['name'] \
endforeach; php
超级对象
-
load
-
URI类(已经自动加载)
提供了segment(n,$no_result = NULL)方法,第一个是从入口文件到值名的条数,第二个参数为可选的,默认为 NULL ,它用于设置当所请求的段不存在时的返回值
入口文件.php/控制器/方法/值1/值2
$this->uri->segment(3);//值1
$this->uri->segment(4);//值2
了解更多访问https://codeigniter.org.cn/user_guide/libraries/uri.html
-
input输入类
$this->input->post[‘username’]; //$_POST[‘username’];
$this->input->server[‘DOCUMENT_ROOT’]; //$_SERVER[‘DOCUMENT_ROOT’];
数据库操作
在application/config/database.php来配置数据库
-
$this->load->database(); //装载数据库操作类,装载成功后,放在超级对象的属性中,默认属性名是db 可以在config/autoload/autoload[‘libraries’] = array(‘adtabase’);来设置自动加载自动加载
-
$res = $this- >db ->query( 查询命令) ;//返回的不是资源句柄,而是一个对象
$res->result(); //将所有查询到的结果存到一个数组里面,返回一个数组,数组的每个项的值是一个对象(即每条数据对应一个对象)
$res->result_array(); //返回关联数组 相当于 mysqli_fetch_all($res,MYSQLI_ASSOC)
$res->row() //返回第一条数据(对象)
$res->row_array() // 返回第一条数据(数组)
-
$this->db>query(插入命令/更新命令);//返回布尔值
$this->db->affected_rows() //查询受影响的行数 相当于mysqli_affected_rows
插入的时候把接受到的数据存进一个数组里,然后插入的时候传数组名
如:$data[0] = ‘$name’; $data[1] =’$id’;
$sql = Insert into asd (name,password) value (?,md5(?));//问号表示参数,当参数大于1时,需要传进去一个索引数组
$this->db>query($sql,$data);//传一个索引数组
-
配置交换表前缀
db[default] = 'blog_';** **db[default] = ‘my_’;
那么我们在写sql语句时就用my_这个表前缀,ci会自动把my_换为blog_,所以,dbprefix可以随便修改,方便我们修改数据库名。
如:$sql = “SELECT * FROM my_archive”;
Active Record
-
application/config/database.php;
$active_record = TRUE; 通过这个启动AR
-
在配置文件中配置完表前缀后,会自动添加
$this ->db ->get(‘表名’);//对应select 方法
$this ->db ->insert(‘表名’,‘关联数组’);//对应insert方法 前提是键名要与表的字段相对
$this -> db ->insert(‘表名’,‘关联数组’,‘条件’); //对应update
$this -> db ->delete(‘表名’,‘条件’);//对应delete
1
2
3
4
5
6$this->db->select('id,title')
->from('text')
->where('id >=',3)//where(array('id >'=>3,'title' => 'ci'))
->limit(3,2)//从第二个数据往后,取三个 相当sql的limt(2,3);
->order_by('id desc')
->get();
扩展CI控制器
-
用于登录验证,权限验证
-
在application/core/My_controller.php 此控制器要继承至CI_Controller
parent::controller(); 其他控制器需要继承至此新建的控制器
模型
- 命名:如user_model.php 里面继承至CI_Model类 通常类名的命名如 User_model
- $this->load->model(‘user_mode’,‘别名’);//加载模型,加载完成后,自动成为超级对象的属性
- this->user->getAll();//调取模型里的getAll(自己写的)方法,获取数据
URL相关函数
-
使用时 需要在控制器中加载(可以配置自动加载)
1
$this->load->helper('url');
-
site_url(‘控制器/方法’) 动态加载url
-
base_url () //返回网站的根目录(ci目录)
分页类
-
$this->load->library(‘pagination’);//在类库中装载分页类
-
$page_size = 10;//自定义变量表示 每页显示10条数据
-
$config[‘total_rows’] = 100;//表示每页有100条数据
-
$config[‘per_page’] = $page_size;
-
$config[‘base_url’] = site_url(‘user/index’);//设置按钮的链接地址对应方法 使用前需要加载url类
-
config['first_link'] = '首页';//自定义按钮名 config[‘prev_link’] = ‘上一页’;
config['next_link'] = '下一页'; config[‘last_link’] = ‘最后一页’; -
$this->pagination->initialize($config);初始化分页属性
-
$this->pagination->create_links();设置分页按钮
一般可以$data[‘links’] = $this->pagination->create_links(); 然后么在视图里使用
$offset = intval($this->uri->segment(3));//获取链接的分页数字并转换成整形,当切换第一页的时候uri里显示的 空 转换成0
$sql = “select * from blog limit $offset,$page_size”;
session类
-
$this->load->library(‘pagination’);使用前先装载
-
使用时 不让session被随意修改 在application/config/config.php里的$config[‘encryption_key’] = ‘’;加密
-
使用
1
2
3
4
5$this->session->set_userdata($array); //添加session数据
or $this->session->set_userdata('some_name', 'some_value');//添加一个键值对
$name = $this->session->userdata('name');//获取键名为name的键值 如果想获取所有已存在的 userdata ,你可以忽略参数
$this->session->has_userdata('some_name'); //检查某个 session 值是否存在
$this->session->unset_userdata($array_items);删除 Session 数据 也可以单个删除 -
Flashdata数据 它是一种只对下一次请求有效的 session 数据, 之后将会自动被清除
1
2$this->session->set_flashdata('item', 'value');//设置Flashdata数据
$this->session->flashdata('item');//获取Flashdata数据