codeigniter框架学习


 CI是什么?

 codeIgniter 轻量级 功能强大的php框架

  基于MVC设计模式,提供了一套丰富的类库

  简单易学,高效实用

 

官方网站

  www.codeigniter.com

中文网站 里面有中文的学习文档,可以多看看。

  http://codeigniter.org.cn

 

有什么特点?

  一个小巧的框架

  出色的性能

  广泛兼容标准主机上的各种php版本和配置

  几乎只需0配置的框架

  不需使用命令行的框架

  不需要坚守限制性编码规则的框架

  不必非要学习一门模板语言(虽然可以选择你喜欢的模板解析器)

  不复杂,简单

  清晰完整的文档

 

目录结构说明

  License.txt许可协议

  User_guide用户手册

  System              框架核心文件

  Application应用目录

  Index.php   入口文件

 

—————————————————————————————————————

MVC

1        入口文件

唯一一个让浏览器直接请求的脚本文件

2        控制器controller

负责模型和试图

3        模型model

提供数据,保存数据

4        视图view

只负责显示

表单

5        动作action

控制器中的方法,用于被浏览器请求

 

CI中的MVC

  访问url使用的是pathinfo

  入口文件.php/控制器/动作

  Application        目录中:

  Controllers     控制器

  Models          模型

  Views             视图

默认控制器是welcome

默认动作时index

 

控制器

  1 不要加后缀,直接是类名

  2 文件名全部小写,例如 user.php。

  3 所有的控制器,直接或间接继承自CI_Controller类。

  4 动作要求: public方法,不能以下划线开头,不区分大小写

 

视图

  1 在控制器中如果加载视图

// 直接写视图名字,不写扩展名,如果有子目录,则写上目录名

   $this->load->view(视图);视图中可以多次调用

  2 视图中使用原生php代码,不使用模板

  3 推荐使用

    <?php foreach($listas $item)?>

    <?=item[‘id’]?>

    <?phpendforeach?>

 

CI的超级对象

  当前的控制器对象

  提供了很多属性

1        $this->load装载器

      装载器类的实例 system/core/Loader.php

    转载器类提供的方法

    View()           装载视图

    Vars()             分配变量到视图

    Database()      装载数据库对象

    Model()          装载模型对象

    Helper()         提供了辅助函数

2        $this->uri

CI_URI url相关的解析,比如获取get参数 system/core/URI.php

CI_URI提供的方法

Segment()用于获取url中的第n个参数

传统的:入口文件.php/控制器/参数1/值1/参数2/值2

入口文件.php/控制器/动作/值1 /值2

Echo$this->segment(3);     //值1

Echo$this->segment(4);     //值2

 

// index.php/控制器/index/6

Pulbi c functionindex($p=0)

{

     Echo $p;        //将输出6

}

3        $this->input 输入类

是CI_Input类的实例system/core/input.php

CI_Input提供的方法:

Post()方法

Server(‘DOCUMENT_ROOT’)

 

  在视图中,直接用$this来访问超级对象的属性

 

数据库访问

  1 修改配置文件

    Application/config/database.php

  2 将数据库访问对象,装载到超级对象的属性中$this->db

    $this->load->database();

    $res = $this->db-query($sql);      //返回对象

   $res->result();                             //返回数组,数组中是一个一个的数组

   $res->result_array();                    //返回数据,里面是关联数据

    $res->row();                               //返回第一条数据,直接是一个对象

   $res->row_array();                      //返回第一个数据,一个关联数组

  3 参数绑定

    $sql = “select* from blog_user where name?”;

   $this->db->query($sql, $name);    //如果有多个问号时,需要传入一个索引数组

  4 表前缀

$db['default']['dbprefix']= 'blog_';

    $db['default']['swap_pre']= 'blog_';

配置为一样,代码中,直接编码表前缀就行了,如果以后项目数据库表前缀发生变化,只需要修改$db['default']['dbprefix'] = 'new_';代码中的blog_会自动替换为

5 db的自动加载

   配置自动加载db在application/config/autoload.php

$autoload['libraries'] = array('database');

不需要:$this->load->database();

6        自增id

$this->db->insert_id();

7        受影响行数

$this->db-affected_rows();

 

Active Record

  1 application/config/database.php

确保$active_record = TRUE;

  2 自动加载设置

Application/config/autoload.php里的

$autoload[‘libraries’]= array(‘database’);

  3 配置文件中,配置表前缀,会自动添加

4        具体操作

Select查询

$res = $this->db->get(‘表名’);                   //返回结果集对象

   $res->result();

      Insert插入

    $bool =$this->db->insert(“表名”, 关联数组);

    Update更新

    $bool =$this->db->update(‘表名’, 关联数组, 条件);

    Delete操作

    $bool =$this->db->delete(‘表名’, 条件);

    连贯操作

       $res= $this->db->select('id, name')

              ->from('user')

              ->where('id>=', 3)

              ->limit(3,1)                 // 跳过2条,取出3条数据

              ->order_by('id desc')

              ->get();

    执行最近一条sql语句

      Echo$this->db->last_query();

       条件where

$res = $this->db->where('name', 'm

ary')->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_Model

  在模型中可以直接使用超级对象中的属性

  文件名全是小写

类名首字母大写

  建议使用_model作为后缀,防止和控制器类名发生冲突

 

url相关函数

 this->load->helper(‘url’); 

// 可以根据需要配置自动自动加载

// application/config/autoload.php

// $autoload[‘helper’] = array(‘url’);

 site_url(‘控制器/方法’)

 base_url();网站的根目录

 

设置路由

  Application/config/routers.php

  默认控制器

$route['default_controller'] = "welcome";

 

Http://localhost/ci/index.php/news/201309/4.html

$route['news/[\d]{6}/([\d]+\.html)'] = "article/show/$1";

 

隐藏入口文件

  开始apache的rewrite模块,在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');

/* 每页显示10条数据 */

$page_size = 10;

 

$config['base_url'] = site_url('user/test');

/* 一共有多少条数据 */

$config['total_rows'] = 100;

/* 每页显示条数 */

$config['per_page'] = $page_size;

$config['per_page'] = $page_size;

$config['first_link'] = '首页';

$config['next_link'] = '下一页';

$config['uri_segment'] = 3;              /*分页的数据查询偏移量在哪一段上 */

$this->pagination->initialize($config);

             

$offset = intval($this->uri->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 echosite_url('user/upload')?>" method="post" enctype="multipart/form-data">     

<input type="file"name="pic"/>

<input type="submit" value="上传">

</form>

//上传目录需要手工创建

$config['upload_path'] = './upload/';

/* 允许 */

$config['allowed_types'] = 'gif|png|jpg|jpeg';

/* 生成新文件名 */

$config['max_size'] = '10000';

$config['allowed_types'] = 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

  // 生成一个随机不重复的字符串作为加密用的key

// 保存到配置文件application/config/config.php

// $config['encryption_key'] = '9b552db80f226f042fb02be80456902a';

// echo md5(uniqid());exit;

$this->load->library('session');

$user = array(

       'id'=> 3,

       'name'=> 'jack'

);

 

$this->session->set_userdata('user', $user);

      

// 不要在这里获取刚放放入的数据

// 只有页面在新加载或跳转到别的url中才能获取到

             

// 一次性的数据,只能读取一次

$this->session->set_flashdata('test', 'aaaaaa');

 

// 下面获取到存入的数据

$this->load->library('session');

// 取CI_session中的数据

$user = $this->session->userdata('user');

var_dump($user);

 

// 下次刷新,就没有了

$test = $this->session->flashdata('test');

var_dump($test);

 

验证码

$this->load->helper('url');

$this->load->helper('captcha');

 

  $vals= array(

       'word'=> 'Random word',      //使用自己生成的随机字符串

       'img_path'=> './captcha/',

       'img_url'=> base_url().'/captcha/',

       'img_width'=> '150',

       'img_height'=> 30,

       'expiration'=> 5     // 过期时间,时间一到会自动回删除图片,单位为秒

);

 

$cap = create_captcha($vals);

$this->load->view('user/test2', array('cap' =>$cap['image']));

session_start();

$_SESSION['cap'] = $cap['cap'];

 注: 这里面需要装gd库,其jpeg是可以用的才可以自动生成验证码的图片的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波罗学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值