CI(CodeIgniter)框架
CI是什么?
CodeIgnitert是一个轻量级但功能强大的PHP框架
基于MVC设计模式,提供了一套丰富的类库
简单易学,高效实用
官方网站
www.codeigniter.com
中文网站
http://codeigniter.org.cn
特点
你想要一个小巧的框架
你需要出色的性能
你需要广泛兼容标准主机上的各种PHP版本和配置
CI 2.1.4 需要 php5.1.6
你想要一个几乎只需0配置的框架
你想要一个不需使用命令行的框架
你想要一个不许坚守限制性编码规则的框架
你不希望被迫学习一门模板语言(虽然可以选你你喜欢的模板解析器)
你不喜欢复杂,热爱简单
你需要清晰完整的文档
目录结构说明
license.txt 许可协议
user_guide 用户手册
system 框架核心文件
application 应用目录
index.php 入口文件
扩展loder
-----------------------------------------------
MVC
1.入口文件
唯一 一个让浏览器直接请求的脚本
2.控制器
协调模型和视图
3.模型
提供数据,保存数据
4.视图
只负责显示
表单。。。
5.动作action
是控制器中方法,用于被浏览器直接请求
CI中的MVC
访问url使用的是pathinfo(入口文件.php/控制器/动作)
application目录中:
controllers 控制器
models 模型
views 视图
默认控制器是welcome,默认动作是welcome
控制器
1.不需要加后缀,直接是类名+.php
2.文件名全部小写,例如user.php
3.所有的控制器,直接或间接继承CI_Controller类
4.控制器中,对动作(方法)要求,否则将不能被浏览器请求
不能以下划线开头,应该是public的
5.与类名相同的方法,会被当做构造方法,相当于__construct(){}
视图
1.在控制器中如何加载视图
//直接写视图名字,不屑扩展名,如果有子目录,则写上目录名
$this->load->view(视图);(可以多次调用)
2.视图中直接使用原生php代码,不适用模板引擎
3.推荐使用
<?php foreach($list as $item):?>
<?=$item['name']?>
<php endforeach;?>
超级对象
当前的控制器对象
提供了很多属性:
this->load
装载器类的实例system/core/Loader.php
装载器提供方法:
view() 装载视图
vars() 分配变量到视图
database() 装载数据库操作对象
model() 装载模型对象
helper() 辅助函数
this->uri
是CI_URI类的实例system/core/URI.php
CI_URI类提供的方法:
segment(n) 用于获取url中的第n个参数
入口文件.php/控制器/动作/参数1/参数2
echo $this->segment(3);//值1 echo $this->segment(4);//值2 //index.php/控制器/index/6 public function index($p){ echo $p;//输出6 }
this->input //输入类
是CI_URI类的实例system/core/Input.php
CI_URI类提供的方法:
$this->input->post('username'); //$_post['username']
$this->input->server('DOCUMENT_ROOT'); //$_SERVER['DOCUMENT_ROOT']
在视图中,直接用$this来访问超级对象中的一些属性
数据库访问
修改配置文件application/config//database.php
//将数据库访问对象,装载到超级对象的属性中 $this->db $this->load->database(); $res = $this->db->query($sql);//返回对象 $res->resulr();//返回数组,数组中是一个一个的对象 $res->result_array();//返回二维数组,里面是关联数组 $res->row();//返回第一条数据,直接是一个对象
参数绑定
$sql = "select * from blog_user where name=?"; $this->db->query($sql,$name);//如果有多个问号时,需要传入一个索引数组 //表前缀 //目录 application/config/database.php $db['default']['dbprefix'] = 'blog_'; $db['default']['swap_pre'] = 'blog_'; //配置为一样,直接硬编码表前缀就行了,如果以后项目数据库表前缀发生变化,只需要修改$db['default']['dbprefix'] = 'new_';代码中的blog_会自动替换为new_
db的自动加载
//目录 application/config/autoload.php $autoload['libraries'] = array('database'); //不需要:$this->load->database();
//自增id
$this->db->insert_id();
//受影响行数
$this->db->affected_rows();
Active Record(AR)
1.application/config/database.php $active_record = TRUE;
2.application/config/autoload.php $autoload['libraries'] = array('database');
3.在配置文件中,配置表前缀后,会自动添加
$res = $this->db->get('表名'); //返回结果集对象 $res->result();
$bool = $this->db->insert('表名',关联数组);
$bool = $this->db->update('表名',关联数组,条件);//$this->db->update('user',$data,array('id'=>3));
$bool = $this->db->delete('表名',条件);//$this->db->delete('user',array('id'=>2));
//连贯操作
$res = $this->db->select('id,name')
->from('user')
->where('id >=',3) //id后应该有空格
->limit(3,2) //跳过2条,取3条数据
->order_by('id desc')
->get();
//显示最近一条SQL
echo $this->db->last_query();
//where
$res = $this->db->where('name','mary')->get('user'); //等于可省略不写
$res = $this->db->where('name !=','mary')->get('user');
$res = $this->db->where(array('name'=>mary,'id >'=>2))->get('user');
//复杂的查询,可用$this->db->query($sql,$data);使用问号绑定参数
扩展CI控制器
application/core/MY_Controller.php 控制器就要 以继承自MY_Controller
控制器前缀MY_修改:application/config/config.php $config['subclass_prefix'] = 'MY_';
模型
继承自CI_Model,在模型中可以直接使用超级对象中的属性
文件名全小写;类名首字母大写,建议用_model作为后缀,防止和控制器类名冲突(如:User_model)
url相关函数
$this->load->helper('url');//可以根据需要配置自动加载 application/config/autoload.php $autoload['helper'] = array('url');
set_url('控制器/方法')
base_url();//网站的根目录
路由
//application/config/route.php
//默认控制器 $route['default_controller'] = 'welcome';
//http://localhost/ci/index.php/news/201309/4.html
$route['news/[\d]{6}/([\d]+)\.html'] = 'article/show/$1';//$1表示第一个参数,括号里得参数
隐藏入口文件
//1.开启apache的rewrite模块 LoadModule rewrite_module moudles/mod_rewrite.so //2.重启apache //3.在入口文件同级目录下,放入一个.htaccess文件,内容如下: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php/$1 [QSA,PT,L] </IfModule>
分页
//装载类文件 $this->load->library('pagination'); $this->load->helper('url'); //每页显示10条数据 $page_size = 10; $config['base_url'] = site_url('user/test'); //一共有多少条数据 $config['total_rows'] = 100; //每页显示条数 $config['per_page'] = $page_size; $config['first_link'] = '首页'; $config['next_link'] = '下一页'; $config['uri_segement'] = 3;//分页的数据查询偏移量在哪一段上 $this->pagination->initialize($config); $offset = intval($this->url->segment(3));//与$config['uri_segment']对应 $sql = "select * from blog_user limit $offset, $page_size"; echo $sql; $data['links'] = $this->pagination->create_links(); $this->load->view('user/test',$data);
文件上传
//1.手动创建好上传目录 <form action="<?php echo site_url('user/upload')?>" method="post" enctype="multipart/form-data"> <input type="file" name="pic" /> <input type="submit" value ="上传"> </form> //控制器,上传目录需手动 创建 $config['upload_path'] = './uploads/'; //允许上传文件的类型 $config['allowed_types'] = 'gif|png|jpg|jpeg'; $config['max_size'] = '1000'; //生成新文件名 $config['file_name'] = uniqid(); //装载文件上传类 $this->load->library('upload',$config); $this->upload->do_upload('pic'); var_dump($this->upload->data()); //获取上传之后的数据 $data = $this->upload->data(); echo $data['file_name'];
session
//写入 public function login(){ //生成一个随机不重复的字符串作为加密用的key //保存到application/config/config.php //$config['encryption_key'] = 'adb8bf6dxxxxxxxxxxxxxx'; echo md5(uniqid());exit; $this->load->library('session'); $user = array('id'=>3,'name'=>'jack'); //session_start(); //$_SESSION['user'] = $user;//php写入session的方式 $this->session->set_userdata('user',$user); //不在这里获取刚放入的数据 //只有页面重新加载或跳转到别的url中,才能获取到 //一次性的数据,只能获取一次 $this->session->set_flashdate('test','aaaaaaaaaaaaaa'); } //读出 public function show_session(){ $this->load->library('session'); //读取CI session种的数据 $user = $this->session->userdata('user'); var_dump($user); //下次刷新,就没有了 $test = $this->session->flashdata('test'); echo $test; }
验证码
public function test2(){ $this->load->helper('url'); $this->load->helper('captcha'); $vals = array( ‘word’=>rand(1000,9999),//此项不写默认为字母 'img_path' => './captcha',//此目录需要手动创建 'img_url' => base_url().'/captcha', 'img_weight' => 100, 'img_height' => 30, 'expiration' =>60*10 //过期时间,下次生成验证码时会把过期的验证码图片删除,60s*10min ); $cap = create_captcha($vals); $this->load->view('user/test2',array('cap'=>$cap['image'])); session_start(); $_SESSION['cap'] = $cap['word'];//验证时直接对比这个字符串 }
表单验证
public function insert(){ //var_dump($this->input->post('name')); $this->load->library('form_validation'); $this->form_validation->set_rules('name','用户名','required'); $this->form_validation->set_rules('email','邮箱','valid_email'); $bool = $this->form_validation->run(); //var_dump($bool); if($bool){ //调用模型保存到数据库 }else{ //显示错误信息 $this->load->view('user/add'); } } html:
//输出所有的错误 <?php echo validation_errors(); ?> <form action="<?php echo site_url('user/insert');?>" method="post"> name<input type="text" name="name" value="<?php echo set_value('name') ?>"/> <?php echo form_error('name','<span>','</span>') ?> <br> password<input type="password" name="password" /><br> email<input type="text" name="email" value="<?php echo set_value('email') ?>" /> <?php echo form_error('email') ?><br> <input type="submit" value="submit" />
<img src="<?php echo base_url(); ?>uploads/jh.jpg" alt="" width="100"> </form>
posted on 2019-05-05 15:46 长相思兮长相忆ing 阅读(497) 评论(0) 编辑 收藏 举报