CI笔记

目录结构说明

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(视图);

可以多次调用$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/值1/参数2/值2

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

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

echo $this->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->server('DOCUMENT_ROOT');
//$_SERVER['DOCUMENT_ROOT']

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

数据库访问

修改配置文件

application/config/database.php

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

$this->load->database();

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

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

$res->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('database');

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

==================code 2笔记==================================

自增id

 $this->db->insert_id();

 受影响行数

 $this->db->affected_rows();

Active Record

 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('表名',关联数组,条件);

 

 $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=$this->db->where('name','mary')->get('user');

 //$res=$this->db->where('name !=','mary')->get('user');

 //$res=$this->db->where(array('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

 

 application/config/config.php

 $config['subclass_prefix'] = 'MY_';

 

模型

 继承自CI_Model

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

 文件名,全小写

 类名首字母大写

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

 

 

url相关函数

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

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

 //application/config/autoload.php

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

 

 site_url('控制器/方法')

 base_url()

 

 

路由

 application/config/routes.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['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 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'] = '10000';

 //生成新文件名

 $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'];

 

验证码

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

  //保存到application/config/config.php

  //$config['encryption_key'] = 'adb8bf6d0ac4e17b42a80941582497a4';

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

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

  $user=array('id'=>3,'name'=>'jack');

  //session_start();

  //$_SESSION['user']=$user;

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

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

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

 

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

  $this->session->set_flashdata('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;

 

 }

 

表单验证

 

 $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();

 

 if($bool){

  //调用模型保存到数据库

 

 }else{

  //显示错误信息

  $this->load->view('user/add');

 

 }

<?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" />
 </form>

 

 

 

 

时间: 2024-08-04 21:26:42

CI笔记的相关文章

CI框架源码阅读笔记2 一切的入口 index.php

上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1. 设置应用程序环境 define("ENVIRONMENT", "development"); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch

CI框架学习笔记(一) - 环境安装、基本术语和框架流程_php实例

最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛!基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过.本文中反复出现和提及的术语包括: 前端控制器(Front Controller): 用于集中控制用户的所有请求的组件,将用户的请求发送

CI框架学习笔记(二) -入口文件index.php_php实例

上一节(CI框架学习笔记(一) - 环境安装.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1. 设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中,对设定的环

CI框架笔记

一.目录结构 ci_demo ├─myapp 应用主目录 │ ├─autoload.php 自定义的自动加载文件(可选) │ ├─myapp.php应用入口文件,拷贝index.php得到,注意修改$application_folder = 'myapp'; │ ├─cache 缓存目录 │ ├─config 配置目录,包括autoload,database,routes等 │ ├─controllers 控制器目录,可以分为api和web部分(命名自定义),也可以不分 │ │ ├─api ap

CI框架源码阅读笔记5 基准测试 BenchMark.php

由于BenchMark是CI中第一个加载的core组件,因此我们的分析首先从该组件开始.BenchMark的含义非常明确,使用过BenchMark工具的同学应该比较清楚,这是一个基准组件.既然是BenchMark,我们便可大胆猜想,BM组件的主要功能就是记录程序的运行时间.内存使用.cpu使用等情况.     这个组件结构较简单,只有一个marker内部变量和三个对外的接口:   1 Elapsed_time 2 Mark 3 Memory_usage 下面一个个展开来看:   1. mark

php中CI框架基本配置笔记

下面让咱们来看看这ci的准备工作.. 首先要把它的默认页面改过来. 默认是welcome.php访问,我们得改成我们自己的访问页面 这时修改的就是application-->config-->routes.php页面里面的 $route['default_controller'] = "***"; 然后是config.php文件中的 $config['base_url'] = '***';网站地址 $config['index_page'] = 'index.php';默认

php CI框架学习笔记-分页实现程序

举个按关键词搜索结果分页的例子, 1.视图HTML  代码如下 复制代码 <div id="body"> <form action="/index.php/search/index/" method="get"> <p>请输入书名.作者.出版社中的一个或多个来查询.</p> <p><input type="text" name="s" val

Git 学习笔记

  Git/'ɡɪt/,  Linus的第二个伟大作品.Git这个词有点儿意思,Linus自嘲说 "I'm an egotistical bastard,  and I name all my projects after myself. First Linux, now Git. "  感叹我生不逢时,错过了版本控制的"史前黑暗"时代,刚刚接触版本控制,Linus就站在前边,笑嘻嘻的说:"版本控制? 什么是版本控制 .. ".真希望Linus身

JavaScript正则表达式学习笔记与常用正则总结

一.RegExp ECMAScript通过RegExp类型类支持正则表达式,语法和Perl类似: var exp = /pattern/flags; patternb部分是任何简单的或复杂的正则表达式:flags是每个正则表达式所带的一个或者多个标志. 正则表达式的模式匹配支持三个标志: g:全局模式,即模式应用于整个字符串,而非在发现第一个匹配项时立即停止 i:不区分大小写模式 m:多行模式,即到达一行文本末尾是还会继续茶查找下一行中是否存在与模式匹配的项. 1.创建正则表达式 JavaScr