1. CodeIgniter框架
  2. 1、回忆MVC
  3. 1.1M:模型,提供数据,保存数据
  4. 1.2V:视图,只负责显示,表单form
  5. 1.3C:控制器,协调模型和视图
  6. 1.4action:动作,是控制器中的方法,用于被浏览器请求
  7. 2CI中的MVC
  8. CI简介:CodeIgniter是一个轻量级但功能强大的php框架,基于MVC的设计模式。提供了一套丰富的类库
  9. 2.1、访问的url使用的pathinfo
  10. 2.2、格式:入口文件/控制器/动作(默认pathinfo格式)
  11. 2.3application目录:
  12. Controllers控制器
  13. Models模型
  14. Views视图
  15. 2.4、默认的控制器是welcome
  16. 2.5、默认的动作是index
  17. 2.6、文件名全部小写
  18. 3、控制器(controller):
  19. 3.1、不需要加后缀,直接是类名.php
  20. 3.2、文件名全部小写,例如 user.php(大写的文件名浏览器不支持)
  21. 3.3、所有的控制器,直接或间接继承自CI_Controller类,类名首字母大写
  22. 3.4、方法名不区分大小写
  23. 动作要求:1.必须以public开头
  24. 2.不能以下划线(_)开头
  25. 注意!方法名与类名相同,会被php当做构造方法(__construct
  26. 4、视图(view)
  27. 4.1、在控制器中加载视图:$this->load->view(“user_add”);//不加扩展名
  28. 4.2、在控制器中加载视图:$this->load->view(“user/add”);//不加扩展名
  29. 注意:可以多次调用$this->load->view(视图);
  30. 4.3、视图中,直接使用原生php代码
  31. 4.4、在控制器中分配变量:$this->load->vars(“视图中变量名”,php中变量名);
  32. 例如:$str=“abcdefg”;
  33. $this->load->vars(“str”,$str);
  34. 视图中使用:<?php echo $str;?>
  35. 4.5、在控制器中分配多个变量:
  36. 例如:$str=“abcd”;
  37. $list = array(“id”=>”1”,”name”=>”zhangsan”,”pwd”=>”1234”);
  38. $data[“str”]= $str;
  39. $data[“list”]= $list;
  40. $this->load->vars($data);
  41. 4.6CI框架会自己解决php中的短标签<?=…?>
  42. 4.7、推荐使用:<?phpforeach($listas $key=>$val):?>…<?php endforeach;?>
  43. 5、超级对象:当前控制器对象,提供了很多属性
  44. 5.1$this->load属性
  45. 5.1.1、装载器类的实例 system/core/Loader.php
  46. 5.1.2CI_Loader提供的方法:
  47. $this->load->view()装载视图
  48. $this->load->vars()分配变量到视图
  49. $this->load->database()装载数据库操作对象
  50. $this->load->model()装载模型对象
  51. $this->load->helper()帮助对象
  52. $this->load->view(“视图名”,$变量名)装载视图时分配变量
  53. 5.2$this->uri属性
  54. 5.2.1、装载器类的实例 system/core/URI.php
  55. 5.2.2CI_URI提供的方法:
  56. $this->uri->Segment(n)用于获取URL中的第n个参数
  57. 控制器代表1,动作代表2,值1代表3,值2代表为4
  58. 用法1:入口文件/控制器/动作/值1/值2
  59. echo $this->uri->segment(3);//输出值1
  60. 用法2index.php/控制器/动作/6
  61. //可以直接获取;参数一定要对应正确
  62. publicfunction($id=0){
  63. echo $id;//输出6
  64. }
  65. 5.3$this->input属性
  66. 5.3.1、装载器类的实例 system/core/Input.php
  67. 5.3.2CI_Input提供的方法:
  68. $this->input->post(‘username’);//$_POST[“username”];
  69. $this->input->server(“DOCUMENT_ROOT”);//$_SERVER[“DOCUMENT_ROOT”]
  70. $this->input->server(“REMOTE_ADDR”);//客户端IP
  71. $this->input->server(“SERVER_ADDR”);//服务器端IP
  72. 注意:在视图中,可以直接用$this来访问超级对象中的属性
  73. 6、访问数据库
  74. 6.1、修改配置文件:application/config/database.php
  75. 6.2、装载数据库操作类:$this->load->database();
  76. 加载成功后,会放入超级对象的属性中,默认属性名是db
  77. $this->db
  78. 6.3$query= $this->db->query($sql);//返回值是对象(array_fetch_object)
  79. $sql = $this->db->last_query($sql);//显示最后一条执行的sql语句
  80. 6.3.1$query= $this->db->escape();//此函数会确定数据类型,对字符串类型数据转义
  81. 6.4$list= $query->result();//返回数组,数组中是一个一个的对象
  82. 6.5$list= $query->result_array();//返回二维数组,里面是关联数组
  83. 6.6$row= $query->row();//返回第一条数据,直接是一个对象
  84. 6.7$row= $query->row_array();//返回第一条数据,是一个数组
  85. 6.8$count= $query->num_rows();//返回结果集的行数
  86. 6.9$field= $query->num_fields();//返回请求的字段数
  87. 6.10$count= $query->affected_rows();//返回受影响的行数
  88. 6.11$id= $query->insert_id();//返回自增ID
  89. 7、数据库中的配置
  90. 7.1、自动加载db
  91. application/config/autoload.php中配置:
  92. $autoload[“libraries”]= array(“database”);
  93. 这样就不需要 $this->load->database();
  94. 7.2、参数绑定
  95. $name = $this->input->post(“name”);
  96. $pwd = $this->input->post(“pwd”);
  97. //使用问号绑定参数
  98. $data[0]= $name;
  99. $data[1]= $pwd;//用二维数组传递值
  100. $sql =“insertinto ci_user(name,pwd) values (?,?)”;//多个问号,需要传一个索引数组
  101. $bool = $this->db->query($sql,$data);//返回值是boolean
  102. 7.3、表前缀配置
  103. application/config/database.php中配置:
  104. $db[‘default’][‘dbprefix’]=‘ci_’;
  105. $db[‘default’][‘swap_pre’]=‘ci_’;
  106. 配置为一样,代码中,直接编写表前缀后面的名就行了,如果以后项目表前缀发生变化,只需要修改$db[‘default’][‘dbprefix’]=‘new_’,代码中ci_会自动替换为new_
  107. 8、数据库操作(AR模型)
  108. 8.1、配置application/cinfig/database.php
  109. $active_record = TRUE;
  110. 8.2、在配置文件中,配置表前缀后,会自动添加
  111. 8.3、查找(get):
  112. $res = $this->db->get(‘表名’);//返回结果集对象
  113. $list = $res->result();//返回数组,数组中是一个一个的对象
  114. $list = $res->result_array();//返回二维数组,里面是关联数组
  115. 8.4、插入(insert):
  116. //数据使用关联数组
  117. $data[“数据库字段名”]=值;//$this->input->post(“name”);
  118. $data[“数据库字段名”]=值;
  119. $res = $this->db->insert(“数据表名”,$data);//返回结果boolean;
  120. 8.5、修改(update):
  121. //数据使用关联数组
  122. $data[“数据库字段名”]=值;//$this->input->post(“name”);
  123. $data[“数据库字段名”]=值;
  124. $where = array(“id”=>”4”);
  125. $res = $this->db->update(“数据表名”,$data,$where);//返回结果boolean;
  126. 8.6、删除(delete):
  127. $where = array(“id”=>”4”);
  128. $res = $this->db->dalete(“数据表名”, $where);//返回结果boolean;
  129. 9AR的连贯操作
  130. 9.1$res= $this->db->select("id,name")//查找的字段
  131. ->from("user")//数据表名
  132. ->where("id >",3)//条件 id与>之间必须要有空格
  133. ->order_by("id desc")//排序
  134. ->limit(3,1)//分页;表示跳过1条,取3条,与tp相反
  135. ->get();//获取数据
  136. $list = $res->result_array();
  137. 9.2where()条件
  138. 条件符:“>”、“>=”、“<”、“<=”、“=”、“!=“;不指定条件付默认是”=“
  139. 1、只有单个条件时:
  140. 9.2.1$res= $this->db->where(“字段”,”值”)->get();
  141. 例如:$res= $this->db->where(“name”,”admin”)->get();//自动会加上“=”
  142. 9.2.2$res= $this->db->where(“字段=”,”值”)->get();
  143. 例如:$res= $this->db->where(“name=”,”admin”)->get();//必须要有空格
  144. 2、有多个条件时:用array()
  145. 9.2.3$res= $this->db->where(array(“字段”=>”值”,“字段”=>”值”))->get();
  146. 例如:$res= $this->db->where(array(“name”=>”admin”,“id>3”=>”2”))->get();
  147. 9.2.4、复杂的查询语句使用$this->db->query($sql,$data);//使用问号绑定参数
  148. 9.3join连接查询
  149. 9.3.1、默认为左查询(left join on
  150. $this->db->select(“字段”)
  151. ->from(“数据表名”)
  152. ->join('连接表','连接条件')
  153. ->get(); //默认为左查询(left join … on) 例如:
  154. $this->db->select(“*”)
  155. ->from(“user”)
  156. ->join('category', user.id= category.id)//默认为左查询(left join )
  157. ->get();
  158. 9.3.2、通过join()第三个可选参数选择连接,可选参数包括:left rightouter innerleft outerright outer
  159. 例如:
  160. $this->db->select(“*”)
  161. ->from(“user”)
  162. ->join(“category”, user.id = category.id”,”left”)//通过第三个参数指定
  163. ->get();
  164. 10、扩展CI控制器
  165. 10.1、扩展控制器
  166. 1、在application/core新建一个自己的控制器(MY_Controller),新建的控制器继承CI_Controller类,可以从自己创建的控制器中进行扩展。
  167. 例如:class MY_Controller extends CI_Controller{
  168. Public function __consreuct(){
  169. Parent::__construct(); //调用父类的构造方法
  170. //登陆验证
  171. //权限验证
  172. }
  173. }
  174. 2、让welcome.php继承自己创建的控制器(MY_Controller),间接继承CI_Controller
  175. 3、控制器前缀可以修改
  176. application/config/config.php中修改:
  177. $config['subclass_prefix'] = 'MY_';
  178. 11、模型(model)
  179. 11.1、模型文件命名:user_model.php category_model.php,文件名小写
  180. 建议:模型文件名使用_model为后缀,防止与控制器类名冲突!
  181. 11.2、所有的模型,直接或间接继承自CI_Model类,类名首字母大写
  182. 11.3、里面创建所需要的方法:getAll()…
  183. 11.4、控制器中加载模型:$this->load->model(“模型文件名”); //不加后缀
  184. 11.5、控制器中加载模型时起别名:$this->load->model(“模型文件名”,”别名”);
  185. 加载成功后,会放入超级对象的属性中,默认属性名是模型文件名或别名
  186. 11.6、控制器中调用模型,获取数据:$this->模型文件名->方法名();
  187. 例如:$this->load->model(“User_model”); //注意大小写
  188. $this->User_model->getAll(); //调用模型,获取数据
  189. 11.6.1、控制器中调用模型,获取数据:$this->别名->方法名();
  190. 例如:$this->load->model(“User_model”,”user”); //注意大小写
  191. $this->user->getAll(); //调用模型,获取数据
  192. 12CIurl相关函数
  193. 12.1、加载辅助函数:$this->load->helper(“url”);
  194. 配置自动加载辅助函数:在application/config/autoload.php中配置
  195. $autoload['helper'] = array('url');
  196. 就不用写$this->load->helper(“url”);
  197. 辅助函数:
  198. site_url(“控制器/动作/参数”) ; //处理url及参数
  199. 在视图中使用<?php echo site_url(“控制器/动作/参数”)?>
  200. base_url();//返回网站的根目录(“ci/”);
  201. 13CI中的路由与伪静态、隐藏index.php入口文件
  202. 13.1、路由设置
  203. application/config/routes.php中设置/修改:
  204. $route['default_controller'] = "welcome"; //默认的控制器为welcome
  205. 13.2、伪静态设置
  206. application/config/routes.php中设置/修改:
  207. //正则匹配(控制器/)
  208. $route['news/[\d]{6}/([\d\w]+)\.html'] = 'user/show/$1';
  209. http://localhost/CI/index.php/news/201401/caolizhi66.html
  210. 将动作news中的参数路由到user/show/$1
  211. 13.3、隐藏入口文件index.php
  212. 13.3.1、开启apache配置文件:LoadModule rewrite_module modules/mod_rewrite.so
  213. 13.3.2、在入口文件统计目录中,创建一个.htaccess文件,内容如下:
  214. <IFModule mod_rewrite.c>
  215. RewriteEngine on //启用伪静态
  216. RewriteCond %{REQUEST_FILENAME} !-d //匹配不存在的目录
  217. RewriteCond %{REQUEST_FILENAME} !-f //匹配不存在的文件
  218. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] //重写规则
  219. </IFModule>
  220. 这样就不用写入口文件index.php
  221. 14CI中的分页
  222. $this->load->library('pagination');
  223. 1 $config['base_url'] = $url;
  224. 2 /* 分页的基础 URL
  225. 3 如果你想用a、b的链接形式,则该url应该形式如/news/page/
  226. 4 如果链接是c、d的形式,则url应该如/news?
  227. 5 */
  228. 6 $config['total_rows'] = $total;//记录总数,这个没什么好说的了,就是你从数据库取得记录总数
  229. 7 $config['per_page'] = $pagesize; //每页条数。额,这个也没什么好说的。。自己设定。默认为10好像。
  230. 8 $config['page_query_string'] = TRUE;
  231. 9 /*传参形式。开启true则会自动在你的url后面加上&per_page=3。(这个per_page是默认的查询字符,当然你也可以用$config['query_string_segment']来自己设定)
  232. 10 因此c、d中的形式一般是为localhost/news?&per_page=2不过都一样,没什么影响。get的per_page还是3
  233. 11 */
  234. 12 $config['first_link'] = '首页'; // 第一页显示
  235. 13 $config['last_link'] = '末页'; // 最后一页显示
  236. 14 $config['next_link'] = '下一页>'; // 下一页显示
  237. 15 $config['prev_link'] = '<上一页'; // 上一页显示
  238. 16 $config['cur_tag_open'] = '<aclass="current">'; // 当前页开始样式
  239. 17 $config['cur_tag_close'] = '</a>';
  240. 18 /*当前页结束样式。这些你可以自己尝试一下。
  241. 19 比如说我想让当前页的分页数字样式好看一点,红色字体等。你就可以在current上加上css代码
  242. 20*/
  243. 21 $config['num_links'] = 2;//当前连接前后显示页码个数。意思就是说你当前页是第5页,那么你可以看到3、4、5、6、7页。
  244. 22 $config['uri_segment']=4;
  245. 23/*这个是你在用a)、b)链接样式的时候,用来判断页页数。
  246. 24 比如localhost/news/page/3 这个uri_segment就要设定为3。localhost/news/title/page/3这个就要设定为4
  247. 25 */
  248. 26 $config['use_page_numbers']= TRUE;
  249. 27/*这个就是a)、b)的差别了。开启了,page就会表示页数。false就会表示记录数
  250. 15.定义常量
  251. constants.php
  252. //自定义常量 define('GATEWAY_URL', 'http://pay.bebanks.com');

CodeIgniter框架使用总结的更多相关文章

  1. 学习CodeIgniter框架之旅(一)自定义模板目录

    在常用的框架本身都已经做好了分层和目录结构,但这在很多时候不满足项目的需求甚至在某些情况下变得不合理,因此很多时候需要自定义目录结构,在此就看看如果在CodeIgniter框架中自定义模板目录: 在C ...

  2. CodeIgniter框架入门教程——第三课 URL及ajax

    本文转载自:http://www.softeng.cn/?p=74 这节课讲一下CI框架的路由规则,以及如何在CI框架下实现ajax功能. 首先,先介绍CI框架的路由规则,因为CI框架是在PHP的基础 ...

  3. CI(CodeIgniter)框架入门教程——第二课 初始MVC

    本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...

  4. ***PHP中error_reporting()用法详解(含codeigniter框架中屏蔽错误提示的解决方案)

    php中我们对错误的处理会常用到error_reporting函数了,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE)了,这个到底什么意思呢,下面我来来看看. e ...

  5. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

  6. CodeIgniter框架中关于URL(index.php)的那些事

    最近,在做自己的个人网站时,采用了轻量级的php框架CodeIgniter.乍一看上去,代码清晰简洁,MVC模型非常容易维护.开发时我采用的工具是Netbeans IDE 8.0,当然,本文的内容和开 ...

  7. 使用CodeIgniter框架搭建RESTful API服务

    使用CodeIgniter框架搭建RESTful API服务 发表于 2014-07-12   |   分类于 翻译笔记   |   6条评论 在2011年8月的时候,我写了一篇博客<使用Cod ...

  8. **【ci框架】精通CodeIgniter框架

    http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架 ...

  9. CodeIgniter框架开发的统计程序源代码开放

    文章来源: PHP开发学习门户 自己初学php时,用CodeIgniter框架开发的后台统计程序源代码 程序部分页面如图: 具体配置及下载源代码:http://bbs.phpthinking.com/ ...

  10. 一步一步重写 CodeIgniter 框架 (9) —— 使用 CodeIgniter 类库

    通过前面几节的内容,我们从零开始搭建了一个非常方便的MVC框架,理解了 CodeIgniter 框架最核心的部分.然而一个框架的便利不仅仅在于提供一个MVC就可以了,它还必须具有较高的扩展性.下面将从 ...

随机推荐

  1. Cassandra数据建模中最重要的事情:主键

    Cassandra数据建模中要了解的最重要的事情:主键 使用关系数据建模,您可以从主键开始,但是RDBMS中的有效数据模型更多地是关于表之间的外键关系和关系约束.由于Cassandra无法使用JOIN ...

  2. C#支付宝支付接口H5版(手机网页支付)

    接口官方文档 https://docs.open.alipay.com/203/107090/ 首先在Nuget 安装 Alipay /// <summary>         /// 支 ...

  3. C#实现DataTable转.CSV文件

    将DataTable转换成CSV文件是一种常见的转换形式,主要通过遍历Table的每行,再对每行遍历每列,实现对数据的读取,然后用分隔符分隔Table的每个栏位数据,把读取的字符写入到CSV文件中.这 ...

  4. Js字符串按数量分组

    代码: function group(ss,step) { var r = []; function doGroup(s) { if (!s) return; r.push(s.substr(0, s ...

  5. Golang 正则匹配 -- regexp

    匹配特殊字符 //re :=regexp.MustCompile("[~!@#$%^&*(){}|<>\\\\/+\\-[]:\"?'::''"&qu ...

  6. 【5min+】闪电光速拳? .NetCore 中的Span

    系列介绍 简介 [五分钟的DotNet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的. ...

  7. Jquery电子签名制作_jSignature

    今天用Jquery的jSignature库制作一个电子签名 后台.net core上传到指定文件夹 下载jquery库 提取码:rd9g html @{ Layout = null; } <!D ...

  8. django count(*) 慢查询优化

    分页显示是web开发常见需求,随着表数据增加,200万以上时,翻页越到后面越慢,这个时候慢查询成为一个痛点,关于count(*)慢的原因,简单说会进行全表扫描,再排序,导致查询变慢.这里介绍postg ...

  9. 关于爬虫的日常复习(9)—— 实战:分析Ajax抓取今日头条接拍美图

  10. python scoket

    一.简介 scoket(套结字)在python就是模块 二.分类 基于文件型(不用) 基于网络型 名字:AF_INET AF_INET6 三.scoket应用 1.基于tcp 长连接:基于tcp的Se ...