CodeIgniter(CI)学习笔记整理
发表时间:2014-8-15 评论:2 点击 5,979+
深入理解MVC设计模式
CI的超级对象
数据库访问
AR模式
如何扩展CI的控制器
模型
uri的相关函数
设置路由
隐藏入口文件
分页
文件上传
session
验证码
表单验证
CI中的MVC
访问url使用的是pathinfo
入口文件.php/控制器/动作
application目录中
controllers 控制器
models 模型
views 视图
默认控制器是welcome
默认动作是index
控制器
1.不需要加后缀
2.文件名全部小写 例如user.php
3.所有的控制器,直接或间接继承CI_Controller类
4.控制器中,对动作(方法)要求:
public
不能以_开头
视图
1.在控制器中如果加载视图
//直接写视图名字,不写扩展名,如果有子目录,则写上目录名
$this->load->view(视图);
可以多次调用$this->load->view(视图);
2.视图中,直接使用原生php代码
3.推荐使用
<?php foreach ($showlist->result() as $item): ?>
<?= $item->title ?>
<?php endforeach; ?>
超级对象
当前控制器对象
提供了很多属性:
$this->load
装载器类的实例system/core/loader.php
装载器类提供方法:
view 装载视图
vars() 分配变量到视图
datebase() 装载数据库操作对象
model() 装载模型对象
helper()
$this->uri
是CI_URI类的实例system/core/URI.php
CI_URI类提供方法:
segment(n) 用于获取url中的第n个参数值
传统的:入口文件.php/控制器/动作/参数1/值1/参数2/值2
入口文件.php/控制器/动作/值1/值2
echo $this->uri->segment(3) //值1
echo $this->uri->segment(4) //值2
//index.php/控制器/index/6
public function index($p=0){ echo $p;//输出6}
$this->input
输入类
是CI_Input类的实例system/core/Input.php
CI_Input类提供方法:
$this->input->post(‘username’); //$_POST[‘username’]
$this->input->sever(‘DOCUMENT_ROOT’);//$_SERVER[‘DOCUMENT_ROOT’]
在视图中,直接用$this来访问超级对象中的属性
数据库访问
修改配置文件
application/config/database.php
将数据库访问对象,装载到超级对象的属性中 $this->db
$this->load->database();
$rs->$this->db->query($sql);//返回对象
$res->result();//返回数组。数组是一个一个的对象
$rs->result_array();//返回二维数组,里面是关联数组
$res->row//返回第一条数据,直接是一个对象
参数绑定
$sql=”select *from blog_user where name=?”;
$this->db-query($sql,$name);//如果有多个问号时,需要传入一个索引数值
表前缀
$db[‘default’][‘dbprefix’]=’blog_’;
$db[‘default’][‘swap_pre’]=’blog_’;
配置为一样,嗲吗中,直接影编码表前缀就行了,如果以后项目数据库表前缀发生变化,只需要修改
$db[‘default’][‘dbprefix’]=’new_’;代码中的blog_会自动替换为new_
db的自动加载
application/config/autoload.php
$autoload[‘libraries’]=array(‘databae’);
不需要:$this->load->database();
自增id
$this->insert_id();
受影响行数
$this->db->affected_rows();
Active Record
1.application/config/database.php
$active_recors=TRUE;
2.application/config/autolaod.php
$sutoload[‘libraries’]=array(‘database’);
3,在配置文件中,配置表前缀后,会自动添加
$res->$this->db->get(‘表名’)//返回结果集对象
$res->result();
$bool=$this->db->insert(‘表名’,关联数组);
$bool=$this->db->update(‘表名’,关联数组,条件);
$bool=$this->db->delete(‘表名’,条件);
//select id,name from tableName where id>3 order by id desc limit 2,3
$res=$this->db->select(‘id,name’)
->from(‘user’)
->where(‘id >=’,3)
->limit(3,2)//跳过2条,取出3条数据
->order_by(‘id desc ‘)
->get();
//显示最近一条sql
echo $this->db->last_query();
//where
$res->db->where(‘name’,’mary’)->get(‘user’);
$res->db->where(‘name !=’,’mary’)->get(‘user’);
$res->db->where(array(‘name’=>’mary’))->get(‘user’);
$res->db->where(array(‘name’=>’mary’,’id’=>’2′))->get(‘user’);
复杂的查询,使用$this->db->query($sql,$data);//使用问号绑定参数
扩展CI控制器
application/core/MY_Controller.php
控制器要继承自MY_Controller
application/config/config.php
$config[‘subclass_prefix’]=’MY_’;
模型
继承自CI_modle
在模型中,可以直接使用超级对象中的属性
文件名,全小写
类名字首字母大写
建议使用_modle作为后缀,防止和控制器类名冲突
url相关函数
$this->load->helper(‘url’);
//可以根据需要配置自动加载
//application/config/autoload.php
//$autoload[‘helper’]=array(‘url’);
site_url(‘控制器/方法’)
base_url()
路由
application/config/routes.php
//默认控制器
$router[‘default_controller’]=’welcome’;
//http://127.0.0.1/ci/index.php/news/20148/15.html
$route[‘news/[\d]{6}/([\d]+)\.html’]=’article/shoe/$1′;
隐藏入口文件
开启apache的rewite模块,在httpd.conf文件中
LoadModule rewrite_module modules/mod_rewrite.so
重启apache
在入口文件同级目录中放入.htaccess文件
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
分页
$this->load->library(‘pagination’);//装载类文件
$this->load->helper(‘url’); //加载url库
$page_sise = 5;
$config[‘base_url’] = base_url(‘user/showlist’); //文件路径
$config[‘total_rows’] = $this->db->count_all_results(‘yyx_posts’);
; //总共条数
$config[‘per_page’] = $page_sise; //每页显示条数
$config[‘use_page_numbers’] = TRUE;
$config[‘full_tag_open’] = ‘<p>’;
$config[‘full_tag_close’] = ‘</p>’;
$this->pagination->initialize($config);
$offset = intval($this->uri->segment(3));
$re = $this->db->get(‘yyx_posts’, $page_sise, $offset);
//var_dump($re);
$data[‘showlist’] = $re;
$this->load->view(‘user/showlist’, $data);
文件上传
1.手动创建好上传目录
具体看参考手册,很详细
session
生成一个随机不重复的字符串作为加密用的key // //echo md5(uniqid());exit;
//保存在application/config/config.php
//$config[‘encryption_key’]=”;
public function login() {
$this->load->library(‘session’);
$user = array(‘id’ => 1, ‘name’ => ‘admin’);
$this->session->set_userdata(‘user’, $user);
//一次性的数据,只能读取一次
$this->session->set_flashdata(‘test’, ‘123456789’);
}
public function show_session() {
// echo md5(uniqid());
$this->load->library(‘session’);
//取ci session中的数据
$u = $this->session->userdata(‘user’);
var_dump($u);
$t = $this->session->flashdata(‘test’); //只能区一次
echo $t;
}
验证码
public function yzm() {
$this->load->helper(‘url’);
$this->load->helper(‘captcha’);
$vals = array(
// ‘word’ => ‘Random word’,
‘img_path’ => ‘./captcha/’,
‘img_url’ => base_url() . ‘/captcha/’,
// ‘font_path’ => ‘./path/to/fonts/texb.ttf’,
‘img_width’ => ’80’,
‘img_height’ => 25,
‘expiration’ => 7200
);
$cap = create_captcha($vals);
//echo $cap[‘image’];
$this->load->view(‘user/showyzm’, array(‘cap’ => $cap[‘image’]));
session_start();
$r = $_SESSION[‘cap’] = $cap[‘word’];
echo $r;
}
表单验证
public function add_user() {
$this->load->helper(‘url’);
$this->load->library(‘form_validation’);
$this->form_validation->set_rules(‘username’, ‘用户名’, ‘required’);
//$this->form_validation->set_rules(’email’, ‘邮箱’, ‘required’);
$this->form_validation->set_rules(’email’, ‘邮箱’, ‘required|valid_email|is_unique[users.email]’);
$bool = $this->form_validation->run();
if ($bool) {
echo ‘OK’;
} else {
// $this->load->view(‘formsuccess’);
// echo ‘OK’;
$this->load->view(‘user/add_user’);
}
}
///////////////
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>表单测试</title>
</head>
<body>
<form method=”post” action=”<?php echo site_url(‘user/add_user’) ?>” >
名字:<input type=”text” name=”username” value=”<?php echo set_value(‘username’)?>”/>
<?php echo form_error(‘username’,'<span>’,'</span>’) ;?><br/>
邮箱:<input type=”text” name=”email” value=”<?php echo set_value(’email’)?>” />
<?php echo form_error(’email’,'<span>’,'</span>’) ;?><br/>
<input type=”submit” value=”submit” />
</form>
</body>
</html>
2 个评论 “CodeIgniter(CI)学习笔记整理”