乐趣区

CodeIgniter笔记

移除 URL 中的 index.php
开启 Apache 的 mod_rewrite 模块,在项目目录中新建.htaccess 文件,添加如下内容
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
获取 CI 超级对象
$CI = & get_instance()
$version_id = $CI->config->item(“version_id”);
使用辅助函数
一般情况下,辅助函数位于 system/helpers 或者 application/helpers 目录 目录下。加载 URL 辅助函数,它的文件名为 xxx_helper.php
public function use_help()
{
// 加载单个
$this->load->helper(‘url’);
// 加载辅助函数,单个或多个
// 路径:application\helpers\demo_helper.php 和 application\helpers\test_helper.php
// $this->load->helper([‘demo’,’test’]);
echo site_url();
echo base_url();
}
扩展辅助函数
要扩展原始的 数组辅助函数,首先你要创建一个文件 application/helpers/MY_array_helper.php,然后在文件中添加或重写函数。
https://codeigniter.org.cn/user_guide/general/helpers.html
设置自定义前缀
用于扩展辅助函数的文件名前缀和扩展类库和核心类是一样的。要自定义这个前缀,你可以打开 application/config/config.php 文件然后找到这项:
$config[‘subclass_prefix’] = ‘MY_’;
使用 codeigniter 类库
所有的系统类库都位于 system/libraries/ 目录下,大多数情况下,在使用之前,你要先在 控制器 中初始化它,使用下面的方法
// 加载类库
$this->load->library(‘encrypt’);
// 使用加载的类库
$tt = $this->encrypt->encode(‘123′,’132’);
创建自己的类库
自定义的类库文件应该放置在 application/libraries 目录下,当你初始化类时,CodeIgniter 会在这个目录下寻找这些类。备注:
文件名首字母必须大写,例如:Myclass.php
类名定义首字母必须大写,例如:class Myclass
类名和文件名必须一致
例如
<?php
class Someclass
{
public function some_class($data)
{
return md5($data);
}
}
使用
public function use_custom_library()
{
// 创建自定义类库
$this->load->library(‘someclass’);
echo $this->someclass->some_class(x);// 目录:libraries/service/emr.php, 例如:$this->load->(‘service’); 调用 $this->service->emr->some_fun();
}
扩展原生类库
要扩展原生的类库,只需要新建一个文件,以 MY_开头并继承原类库即可,示例:要扩展原 Email 类库,只需命名为 application/libraries/MY_Email.php,然后定义你的类
<?php
class MY_Email extends CI_Email
{
//
}
替换原生类库
要替换原类库文件,只需定义与原生的类库命名完全一样,例如,要替换掉原生的 Email 类的话,你要新建一个 application/libraries/Email.php 文件,然后定义定义你的类:
<?php
class CI_Email
{
//
}
更多参考
https://codeigniter.org.cn/user_guide/general/creating_libraries.html
控制器
控制器文件保存到 application/controllers/ 目录下。控制器命名规则
1.` 文件名 ` 必须是大写字母开头,如:’Demo.php’。
2.` 类名 ` 必须以 ` 大写 ` 字母开头。
示例:
<?php
defined(‘BASEPATH’) OR exit(‘No direct script access allowed’);

class Welcome extends CI_Controller
{
public function index()
{
$this->load->view(‘welcome_message’);
}
}
模型
模型类位于你的 application/models/ 目录下。
模型命名规则
1. 类名的第一个字母 必须 ` 大写 `,其余部分小写。
2. 文件名和类名应该一致。
例如, 创建一个 Demo_model.php, 路径:applicationmodelsDemo_model.php
<?php

class Demo_model extends CI_Model
{
// 对应表中的字段
public $name;
public $age;
public $addr;

/**
* 返回最后两条记录
* @return mixed
*/
public function get_last_two_record()
{
$query = $this->db->get(‘demo’, 2);
return $query->result_array();
}

/**
* 插入记录
*/
public function insert_record($data)
{
$this->name = $data[‘name’];
$this->age = $data[‘age’];
$this->addr = $data[‘addr’];

$this->db->insert(‘demo’, $this);
}

/**
* 更新记录
*/
public function update_record($data)
{
$this->name = $data[‘name’];
$this->age = $data[‘age’];
$this->addr = $data[‘addr’];
$this->db->update(‘demo’, $this, array(‘id’ => $data[‘id’]));
}
}
在控制器调用
class demo extends CI_Controller
{
public function use_model()
{
$data = [
‘name’ => ‘Daiod’,
‘age’ => 24,
‘addr’ => ‘Chigo’,
// ‘id’ => 8
];
// 加载 model
$this->load->model(‘demo_model’);
// $this->load->model(‘demo/test’,’demoModel’); // 如果 model 下有子目录,则 $this->load->model(‘xxx/xxx’);
// 给 model 定义别名
$this->load->model(‘demo_model’,’demoModel’);

// 调用 model 中的方法 $this->model_name->method();
// $res = $this->demo_model->get_last_two_record();
$res = $this->demoModel->get_last_two_record();
print_r($res);
// 插入记录
// $this->demo_model->insert_record($data);
// 使用 demo_model 的别名
// $this->demoModel->insert_record($data);
// 更新
// $this->demo_model->update_record($data);
}
}
打印日志
修改 config.php 文件
/*
|————————————————————————–
| Error Logging Threshold
|————————————————————————–
|
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
| 0 = Disables logging, Error logging TURNED OFF
| 1 = Error Messages (including PHP errors)
| 2 = Debug Messages
| 3 = Informational Messages
| 4 = All Messages
|
*/
$config[‘log_threshold’] = 1; // 默认为 0, 这里修改错误级别 error,debug,info
使用
public function log_write()
{
// 打印日志,与配置文件中设置错误级别对应
log_message(‘error’, “this is error messages”);
log_message(‘debug’, “this is debug messages”);
log_message(‘info’, “this is debug messages”);
echo “<br/>”;
}
数据库操作
配置
配置文件路径:CodeIgniterapplicationconfigdatabase.php 自动连接,需要修改 CodeIgniterapplicationconfigautoload.php 文件,
$autoload[‘libraries’] = array();
// 修改为
$autoload[‘libraries’] = array(‘database’);
手动连接
$this->load->database();
操作
查询
public function select()
{
# 获取表中所有记录
$query = $this->db->get(‘demo’);
// 等价于
$query = $this->db->query(“select * from demo”);
// 返回所有记录的的数组
$data = $query->result_array();
// 返回所有记录的的数组对象
$data = $query->result();

// 条件查询
$data = $this->db->select(‘name’, ‘addr’)
->from(‘demo’)
->where(‘name = \’xiaoli\”) // ->where(‘id >=’, 1)
->limit(2)
->order_by(‘age’)
->get()
->result_array();// 返回数组
//where 条件
//where(array(‘name’=>’mary’, ‘id >’=>’1’)); 表示 name 字段值是 mary 并且 id 字段值是 1
//where(‘name’, ‘mary’) 或 where(‘name =’, ‘mary’); 表示查询条件是 name 字段值是 mary

//row() 只返回一行记录,返回的是一个对象
$data = $query->row();

#row_array() 只返回一行记录,返回的是一个数组
$data = $query->row_array();

//num_rows() 返回查询结果行数
$data = $query->num_rows();

//num_fields() 返回查询请求的字段个数
$data = $query->num_fields();

//free_result() 释放当前查询所占用的内存并删除关联资源标识
$data = $query->free_result();

print_r($data);
#返回最后运行的查询 Sql 语句
echo $this->db->last_query(); //select * from demo

#获取插入的自增 Id
echo $this->db->insert_id();

// 写入和更新操作被影响的行数
echo $this->db->affected_rows();

// 返回指定表的总行数
echo $this->db->count_all(‘demo’);

// 输出当前的数据库版本号
echo $this->db->version();

// 输出当前的数据库平台
echo $this->db->platform(); //mysqli

// 查询语句
$this->db->select(‘column1′,’column2’); // 选择查询的字段
$this->db->get(‘table_name’); // 表示 SELECT * FROM table_name
$this->db->get(‘table_name’, 10, 20); // 参数 2 表示每页记录数 (limit),参数 3 表示偏移 (offset),SELECT * FROM table_name LIMIT 20, 10
$this->db->select_max();// 可接受两个参数,参数 2 表示别名
$this->db->select_min();// 同上
$this->db->select_avg();// 同上
$this->db->select_sum();// 同上
$this->db->from(‘table_name’);// 选择表名
$this->db->join(‘table2′,’table2.pid=table.id’,’left’);//$this->db->from(‘table1’);
$this->db->get_where();
// 示例
$this->db->get_where(‘table_name’, array(‘id’ => $id), $limit, $offset);
$this->db->where(‘ 字段 ’,’ 值 ’);// where 字段 = ‘ 值 ’; 或者 where(‘id >’,2);
$this->db->or_where();// 子句 OR 连接
$this->db->where_in(‘xx’,[‘xx’,’xx’]);// where_in(‘username’,[‘Joe’,’Lucy’,’Lily’]);
$this->db->or_where_in(‘xx’,[‘xx’,’xx’]);
$this->db->where_not_in();
$this->db->or_where_not_in();
$this->db->like(‘title’,’match’);// where title like ‘%match%’; 参数 3 表示 before(%match),after(match%),none(match) 默认为 both
// 示例
$array = array(‘title’ => $match, ‘page1’ => $match, ‘page2’ => $match);
$this->db->like($array);
// WHERE title LIKE ‘%match%’ AND page1 LIKE ‘%match%’ AND page2 LIKE ‘%match%’

$this->db->or_like(); //OR 连接

$this->db->not_like();
$this->db->or_not_like();
$this->db->group_by();
$this->db->distinct();
$this->db->having();
$this->db->or_having();
$this->db->order_by();
$this->db->limit();
$this->db->count_all_results();
}
插入
public function add()
{
// 插入数据,被插入的数据会被自动转换和过滤,例如:
$data = array(‘name’ => “xiaoming”, ‘age’ => 23, ‘addr’ => ‘chognqing’);
$this->db->insert(‘demo’, $data);//insert_batch() 插入多条,$data 为二维数组
}
更新
public function update()
{
// $data = array(‘name’ => ‘xiaoming’, ‘age’ => 26, ‘addr’ => ‘shanghai’);
// $where = “name = ‘xiaoming'”;
// $this->db->update(‘demo’, $data, $where);//demo 为表名
// 或者
// $this->db->where(‘id’, 6);
// $this->db->update(‘demo’, $data);
// 或者 $this->db->set(‘key’,’value’);
$data = [‘name’ => ‘nihao’];
$bool = $this->db->update(‘demo’, $data, [‘id’ => 3]); //update_batch()
// 修改 id 为 3 的记录 name 修改为 nihao
var_dump($bool);// 成功则返回 TURE
}
删除
public function del()
{
// $this->db->where(‘id’, 6);
// $this->db->delete(‘demo’);
// 等价于
$bool = $this->db->delete(‘demo’,array(‘id’=>5));// 返回布尔值

}
操作 session
// 使用 session
$this->load->library(‘session’);
// 设置 session
$data = array(
‘username’ => ‘johndoe’,
’email’ => ‘johndoe@some-site.com’,
‘logged_in’ => TRUE
);
// 设置时间, 也可在 config.php 中设置
$this->session->sess_expiration = ‘14400’;
// 仅添加一个值
$this->session->set_userdata(‘info’, $data);
// 添加多个值
// $this->session->set_userdata($data);
// 检查某个 session 值是否存在
$this->session->has_userdata(‘info’);
// 获取 session
$info = $this->session->userdata(‘info’);
// or
$info = $this->session->info;
// 删除单个 session
$this->session->unset_userdata(‘info’);
// 同时删除多个值
// $array_items = array(‘username’, ’email’);
// $this->session->unset_userdata($array_items);
操作 cookie
// 加载辅助函数
$this->load->helper(‘cookie’);
// 添加 cookie
setcookie(“name”, ‘lds’, 86500);
// or
$this->input->set_cookie(“name”, ‘lds’, 60);

// 获取 cookie
$name = get_cookie(‘name’);

// 删除一条 Cookie
delete_cookie(‘name’);
// 删除多条 Cookie
delete_cookie([‘name’, ’email’]);

退出移动版