CI框架学习

原创 2015年11月21日 09:43:48
CI框架学习
php在哪里都可以嵌入

CI控制器
CI超级对象
数据库访问
AR模型
如何扩展CI的控制器
模型
url相关函数
设置路由
分页
文件上传
session
验证码
表单验证
在php什么地方用memcache
一.数据库读出来的数据(select) 使用memcache缓存
二.在会话控制session 讲session写入memcache
1.会memcahe
2.session_set_save_handler()
3.php的session
uniqid() 生成一个唯一ID
*****************************************************************************


框架目录为入口文件所在目录
注意:
url 浏览器相同会进行缓存。。

CI框架
system:核心
index.php:入口文件 
application:应用
基于MVC 访问使用pathinfo格式
数据来自于模型.
控制器 CI_Controller
默认的控制器$route['default_controller'] = "welcome";
$route['404_override'] = '';
1.不需要加后缀,文件名小写。
2.所有的控制器,直接或间接接触CI_Controller类。
3.与类名相同的方法会被php当作构造方法。
4.外部访问必须是public
5.在url参数可以传到方法参数里  function index($a,$b){};
6.控制器不参入查询数据库。
CI的超级对象:控制器对象(自动实例化CI_Loader());
属性:
$this->load:装载器对象。 system/core/Loader.php
view() 装载视图
vars() 分配变量
database() 装载数据库操作对象。
model()     装载模型,获取数据。
helper()   装载帮助
library() 装载类库
$this->uri
是CI_URI类的实例 system/core/URI.php
CI_URI类提供方法;
segment(n);用于获取url中的第n个参数;
传统的url:入口文件.php/控制器/动作/参数1/值1/参数2/值2
CI: 入口文件.php/控制器/动作/值1/值2
$this->input
是CI_Input类的实例 system/core/Input.php //会进行安全处理
CI_Input类提供方法;
$this->input->post('控件名',ture)     //获取$_POST 过滤xss攻击,没有过滤和转义处理
$this->input->get('控件名')     //获取$_get 没有过滤和转义处理。没过滤xss攻击
$this->input->server("REMOTE_ADDR")        //$_SERVER["REMOTE_ADDR"]
$this->input->cookie("");
...
视图
1.在控制器里加载视图,$this->load-view("user_index",$data); 加载根目录下的视图,("user\index");根目录user文件夹下的index 不写扩展名
2.在视图里分配变量。$this->load->vars("title","这是标题");再显示视图
<?php foreach ($todo_list as $item):?>

<li><?php echo $item;?></li>

<?php endforeach;?>
函数返回引用
在视图里中可以直接用$this来访问超级对象(include 视图的);
<?php
echo $this->input->server("SERVER_ADDR");
?>
model模型:
1.继承CI_Model
2.文件名小写,类名首字母大写。建议_model为后缀,防止与控制器冲突。
3.可以直接使用超级对象中的属性;
4.只允许在model模型里获取数据,通过控制器输出。
$this->load->model('Model_name');
$this->Model_name->function();

数据库访问
DB_driver.php
修改配置文件 application/config/database.php
//装载数据库操作
$this->load->database();
//装载成功后,数据库对象会在$this->db属性中
$res = $this->db->query($sql);
$res->result();//返回数组,数组中是一个一个的对象。对象用'->'调用
$res->result_array();返回二维数组,里面是关联数组
$this->db->insert_id(); 自增id
$this->db->affected_rows();受影响行数
$this->db->last_query();//最后一次执行的sql语句.
。。。
封装查询:(防sql注入)
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$this->db->query($sql, array(3, 'live', 'Rick')); (绑定参数)
安全表前缀:
$db['default']['dbprefix'] = 'blog_';
$db['default']['swap_pre'] = 'blog_'; 表前缀
配置为一样,代码中,直接硬编码表前缀就行,如果以后项目数据库表前缀发生改变。
只需要修改$db['default']['dbprefix'] = 'new_';代码中的blog_会自动替换为new_.
db的自动加载
$autoload['libraries'] = array('database');
不需要 $this->load->database();
AR模型 DB_active_rec.php
1.数据配置文件 $active_record = TRUE;  开启AR;
2.在配置文件中,配置表前缀后,会自动添加
$res = $this->db->get("表名");//返回结果集。
$res->result();
增删改:
$this->where('id',$id) //或者$this->where(array());
$this->db->insert('表名',关联数组);
$this->db->update('表名',关联数组的条件);
$this->db->delete("表名", 条件的关联数组);
查找:
$res =  $this->db->select('id,name')
 ->from('表名')
 ->where('id  >=',3)  // 或者 where(array('name ='=>"mary","id"=2))
 ->limit(3,2) //跳过2条,取3条。 注意
 ->order_by('id desc')->get();
$this->db->last_query();//最近一次执行的sql语句.

扩展控制器:(制定自己的控制器基类)(对应的文件夹) 
application/core/MY_Controller.php
class MY_Controller extends CI_Controller {
public function __construct(){
parent::__construct();
//登录验证
//权限验证
...
}
}
别的控制器继承我们的自己的控制器(MY_Controller);
扩展library 类似
application/config/config.php
$config['subclass_prefix'] = 'MY_' 可以修改自定义前缀
url函数:
$this->load->helper('url'); //可以根据需要自动加载 autoload.php
site_url(控制器/方法): //返回站点的URL, 如果在config.php 文件中指定了base_url会返回指定的值,否则自动获取
base_url() //网址根目录,你可以用它指定文件的路径,像是image路径或者css路径

redirect() //转向指定的url
路由:
application/config/routes.php
//默认控制器
$route['default_controller'] = 'welcome';
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
$route['404_override'] = '';
//index.php/news/312456/32.html 会被路由到article/show.
$route['news/\d{6}/\d+\.html']  = "article/show";
不规则的url可以路由到我们的控制器中
隐藏入口文件(伪静态)
开启apache的rewrite模块(httpd.config)
loadModule rewirte_module moules/mod_rewrite.so
重启服务器
在入口文件同级目录中,放入一个 .htaccess文件
内容如下:
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]
分页:
$config['base_url'].="&pass_id=".$_GET['pass_id'];
config['enable_query_strings']  = TRUE;
$this->pagination->initialize($config);
$data['links'] = $this->pagination->create_links();
$this->load->view("article\show",$data);
在一些情况下你需要在 URL 中使用查询字符串:
index.php?c=products&m=view&id=345
在url里传递其他参数
可以在 application/config/config.php 文件中进行设置
$config['page_query_string'] = TRUE; //连接符会从/ 变为? 如果你使用查询字符串,那么就必须使用自己建立的 URL ,而且不能使用URL 辅助函数(或是其他生成 URL 的辅助函数,例如表单辅助函数),因为这些都是根据分段 URL 设计的。
$config['first_url'] = site_url('article/show/1').'/qhi/1/dhiwu/2';
$config['suffix'] = "/qhi/1/dhiwu/2";//参数传递

文件上传:
手动创建上传目录
SESSION:
d1c6074070e4f1f321b01aef1e01b7df// md5(uniquid())
默认放在cookie里
生成一个随机不重复的字符串作为加密用的Key,保存到application/config/config.php
$config['encryption_key'] = 'd1c6074070e4f1f321b01aef1e01b7df';
$this->load->library('session');//初始化 Session
$this->session->set_userdata();
在当前方法session里获取不到session
只能在其他的方法里获取$this->session->userdata();
session 配置在application/config/config.php中
一次性数据,只能读取一次
$this->session->set_flashdata(...);
验证码:
CAPTCHA 辅助函数
$this->load->helper('captcha');
session_start();
$_SESSION['cap'] = $cap['word'];

表单验证:
$this->load->library('form_validation');
$this->form_validation->set_rules('name','用户ming');
$bool =$this->form_validation->run();
if($bool){
调用模型保存数据到数据库
}else{
//显示错误信息
$this->load->view('user/add'); //重新加载视图
}
在视图echo form_error('name');

php CI学习框架

  • 2014年12月15日 14:38
  • 12KB
  • 下载

CI框架学习笔记源码

  • 2017年04月30日 09:11
  • 4.97MB
  • 下载

ci框架基础详解(入门学习)

1、ci框架介绍CodeIgniter 是为 PHP 开发人员提供的一套 Web 应用程序工具包。 它的目标是能够让你比从零开始更加快速的完成项目,它提供了一套 丰富的的类库来满足我们日常的任务需求,...

【PHP】MVC 思想之 CI 框架的学习总结(一)

在 php 日常开发中,MVC 的开发思想可谓是大势所趋,很多公司都有这样的要求,利用框架开发应用程序可以节约开发时间,同时代码便于维护,非常值得大家去学习及应用。      首先向大家简单介绍下什...
  • dymyw
  • dymyw
  • 2012年08月17日 09:12
  • 1470

CI框架学习之三 (常用操作类)

1. 超级对象中的URI CI_URI类的解析url的相关信息 直接使用$this->uri可以使用它的相关属性 system/core/URI.php文件中 部分常用属性: (1)...

【PHP】MVC 思想之 CI 框架的学习总结(二)

如何在 CI 中创建视图:\application\views\*.php     如何在控制器中调用视图,并传递参数: $v_array = array( 'v_name' => $n...
  • dymyw
  • dymyw
  • 2012年08月18日 07:36
  • 2667

CI框架学习之六 ( 数据库查询缓存优化 )

CI框架中有个比较好的查询优化,就是数据库缓存优化 1.开启缓存 //在application/config.php中开启 $db['default']['cache_on'] =...

CI框架学习笔记第一天

此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。 若是想看整个学习笔记代码和数据库可点击此处(包含个人书写的项目代码及数据库文件...

PHP框架CI 学习笔记<一>

清楚了CI 的目录结构,然后根据手册其实就可以简单应用了,但是这并不是今天的主要目的,不知道大家怎么认为,我觉得既然要深入的学习一个框架,就一定要研究其代码。所以我觉得既然清楚了CI 的结构,接下来就...

CI框架学习笔记第三天

此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。 若是想看整个学习笔记代码和数据库可点击此处(包含个人书写的项目代码及数据库文件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CI框架学习
举报原因:
原因补充:

(最多只允许输入30个字)