PHP CI笔记

控制器

  • 访问:入口文件.php/控制器/方法
  • 所有的控制器 直接或间接继承CI_Controller类
  • 私有方法或者属性 可以用private声明或者前面加下划线 如:_user 则该方法不能被访问

视图

  • $this->load->view(视图,$data);//默认加载views里的php 文件,不写后缀,第二个参数为php里用到的数据,可选,多个数据应用数组保存

  • 推荐使用

    1
    2
    3
    <? php foreach(\$list as \$item):?>
    <?=\$item['name']?>
    <? php endforeach;?>

超级对象

  • 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数据

评论