热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《军哥谈CI框架》之入门教程之第四讲:模型和辅助函数

如果你想做的只是在原有的辅助函数文件中添加一些新的功能,比如,添加一两个新的方法,或者是修改一个方法;就不值得重写自己的辅助函数文件。在这种情况下,最好是“扩展”已有的辅助函数文件。
大家新年好!不知不觉我们来到了2013年,军哥祝大家在新的一年里身体儿杠杠滴,吃嘛嘛香,新年新气象,财源滚滚~~


今天我们来学习CI中的模型和辅助函数。



【本讲内容】

一、模型;

之前我们分别介绍了MVC模式中的C层和V层,而M层还没有谈到。现在我们来谈一谈。


了解什么是模型?如何创建一个简单的模型?怎样载入模型?


二、辅助函数。

当我们需要完成某些特定任务的时候,辅助函数将会派上用场啦。还记得军哥在第一讲中介绍CI能够为我们做什么的时候,讲到其中有一个好处是减少代码量,那CI的辅助函数就可以帮助我们做到这一点。




【具体内容】

1、模型。

(1)、什么是模型?


模型对于那些传统MVC方式的人来说是可选的。比如,我们之前讲的一些例子中就没有用到M层,那是由于我们暂时还没有涉及到与数据库的操作,一旦涉及到数据库操作,我们就要用M层了,因为模型(M)就是专门用来和数据库打交道的。



(2)、那怎么样创建一个模型呢?


其实模型就是一个PHP类,里面包含添加、删除、更新和统计数据等方法,我们来创建一个简单的看一下,代码如下:
  1. class User_model extends CI_Model {  
  2.                           
  3.     function __construct()  
  4.     {  
  5.     parent::__construct();  
  6.     }  
  7.                           
  8.     //执行获取数据操作  
  9.     function get()  
  10.     {  
  11.    //代码省略……  
  12.     }  
  13.                           
  14.     //执行添加数据操作  
  15.     function insert()  
  16.     {  
  17.     //代码省略……  
  18.     }  
  19.                           
  20.                           
  21.     //执行更新数据操作  
  22.     function update()  
  23.     {  
  24.     //代码省略……  
  25.     }  
  26.                         
  27.                         
  28.     //执行删除数据操作  
  29.     function delete()  
  30.     {  
  31.     //代码省略……  
  32.     }  
  33. }

此时我们需要注意以下几点:


a、创建的模型类文件应该放在application/models/ 文件夹,文件名应该是模型类名的小写格式。例如上例当中的,文件名应该为user_model.php;


b、类名的首字母必须大写,其他字母小写;


c、确保你的类继承了基本模型类(CI_Model)。


那这样的模型文件建好了,该怎么用呢?


(3)、载入模型。


我们写好的模型是通过控制器来载入和引用的。载入模型在CI中有两种方式:


一种是手动载入,假如我们想载入上面那个模型类,那它可以很容易的在控制器中的方法中装载,就像这样:

  1. $this->load->model('User_model');


以上通常都放在控制器的构造函数中进行装载,毕竟这样只需要手动装载一次就够了。



另一种是自动载入,找到并打开 application/config/autoload.php 文件,然后在自动装载数组中加入这个模型,只要设置$autoload['model'] = array();为:

  1. $autoload['model'] = array('user_model');
载入完模型之后,我们就可以使用它了:

  1. $this->User_model->add();  
  2. $this->User_model->insert();



接下来军哥带大家写一个完整的例子,把之前讲的内容一起连贯起来,正好也复习一下。


由于我们会涉及到数据库操作,因此首先要进行数据库的配置,打开application/config/database.php文件,设置连接数据库的一些参数值,如下:
  1. $db['default']['hostname'] = 'localhost';  
  2. $db['default']['username'] = '你的数据库主机名';  
  3. $db['default']['password'] = '你的数据库密码';  
  4. $db['default']['dbdriver'] = 'mysql';  
  5. $db['default']['database'] = '你的数据库名';


上面只是设置了其中一部分的参数,想了解更多你可以浏览CI中国的中文手册,http://codeigniter.org.cn/user_guide/database/configuration.html


然后我们开始建一个数据表,这里叫user表,表结构如下:
  1. create table user (  
  2.     id int(11) auto_increment primary key not null,  
  3.     name varchar(30) not null default '',  
  4.     nickname varchar(50) not null default '',  
  5.     sex varchar(20) not null default '男',  
  6.     age int(11) not null default 0  
  7. );

我们插入一条数据,如下:

  1. insert into user values(null,'JayJun','排骨哥','男','26');  
  2. insert into user values(null,'浩哥','猥琐男','男','27');



接下来我们写一个用户模型,就起名为user_model.php,代码如下:
  1.      class User_model extends CI_Model {  
  2.     //获取用户信息  
  3.     public function get()  
  4.     {  
  5.         $data = '';  
  6.         //SQL语句的select部分,这里查询user表的所有字段  
  7.         $this->db->select("*");  
  8.        //运行选择查询语句并且返回结果集给$data  
  9.        $data = $this->db->get("user");  
  10.        return $data;  
  11.      }  
  12.      }  
  13. ?>
紧接着写控制器,起名为user.php,代码如下:

  1.      class User extends CI_Controller{  
  2.     //构造函数  
  3.     function __construct()  
  4.     {  
  5.        parent::__construct();  
  6.        //载入用户模型  
  7.        $this->load->model("User_model");  
  8.     }  
  9.     //显示用户信息列表  
  10.     public function index()  
  11.     {  
  12.         //调用用户模型中的get方法,将结果集返回给$query  
  13.         $query = $this->User_model->get();  
  14.         //将结果集作为关联数组返回  
  15.         $data['userList'] = $query->result_array();  
  16.         $this->load->view('user_index',$data);
  17.      }  
  18.      }  
  19. ?>
最后,我们开始写视图,代码如下:

  1.   
  2.       
  3.           
  4.           
  5.       
  6.       
  7.         
      
  8.               
  9.                 
  10.   
  11.                     
  12.   
  13.                     
  14.   
  15.                     
  16.   
  17.                     
  18.   
  19.                     
  20.   
  21.                 
  22.   
  23.                   
  24.                 
  25.   
  26.                     
  27.   
  28.                     
  29.   
  30.                     
  31.   
  32.                     
  33.   
  34.                     
  35.   
  36.                 
  37.   
  38.                   
  39.             
  40. ID号 姓名 外号 性别 年龄
      
  41.         
  
  •       



  • 好,现了我们打开浏览器,输入http://localhost/ci_demo/index.php/user/index即可访问到用户列表啦!

    亲,如果你没有出现错误的话,应该会出现下图所示的结果:


    图片:97b82afbjw1e0gkya33j3j.jpg





    2、辅助函数。

    说起函数,这真不得不说函数是个好东西啊,它能够辅助我们解决很多复杂的问题,大家都知道,函数也是为了重用而发明的,能够减少我们的代码量,提高我们的编码效率,我们许多时候是离不开它的。而最关键的是CI本身就为我们提供了一系列的功能不同的辅助函数文件。军哥截了一张CI中国中文手册上的截图,如下图所示:







    我们从图中可以看到CI为我们提供了多达21种辅助函数文件。像这其中就有用于处理数组操作的数组辅助函数文件(Array Helpers)、帮助你创建表单的表单辅助函数文件(Form Helpers)以及帮助我们创建链接的URL辅助函数文件(URL Helpers)等等。若这些还不能满足你的需求,你也可以很轻易的“扩展”这些函数文件或者使用自定义的函数文件。



    辅助函数文件一般保存在 system/helpers 或 application/helpers 文件夹中。CI将会先在 application/helpers 寻找对应的辅助函数文件, 如果目录不存在或者目录下没有对应的辅助函数文件,CI 才会载入system/helpers下的辅助函数文件。

    (1)、载入辅助函数。

    CI 默认是没有载入辅助函数文件的,所以如果你想用辅助函数,就必须先载入它。 一旦被载入,辅助函数将全局可用,你可以在控制器和视图中使用它们。我们像这样载入辅助函数文件:
    1. $this->load->helper('辅助函数文件名字,不带_helper和.php后缀的那部分');

    比方说,你想载入数组辅助函数文件,就像这样:
    1. $this->load->helper("array");


    如果你想一次载入多个辅助函数,你可以这样做:
    1. $this->load->helper( array('helper1', 'helper2', 'helper3') );



    (2)、使用辅助函数。


    比方说当载入一个URL辅助函数文件之后,我们就可以使用里面的某个函数了,像anchor(),它有三个可选参数:
    1. anchor(uri segments, text, attributes);


    第一个参数包含你想附加到URL上的一些参数;


    第二个参数是你想链接的名字;


    第三个参数包含一组你想附加给链接的属性。


    举个例子看一下:
    1.     echo anchor('jayjun/feadback','反馈&交流','title="反馈&交流"') ;
    2. ?>
    等同于:
    1. 反馈&交流


    (3)、“扩展”辅助函数。


    如果你想做的只是在原有的辅助函数文件中添加一些新的功能,比如,添加一两个新的方法,或者是修改一个方法;就不值得重写自己的辅助函数文件。在这种情况下,最好是“扩展”已有的辅助函数文件。



    例如,军哥在写PHPer小站的搜素功能时,需要将搜索结果的二维数组重复值去掉(详情见:http://phpersite.sinaapp.com/index.php/jayjun/doc/start/2/cid/28/aid/62.html ),而原有的数组辅助函数文件中却没有函数能够做到,此时就要自定义一个函数来帮我们处理,也就是说"扩展"一个数组辅助函数文件,这时应该建立一个文件:application/helpers/MY_array_helper.php,将自定义的函数写进去即可在控制器中使用了。



    下一讲,我们来学习如何使用CI中的类库和如何创建一个自己的类库。

    推荐阅读
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • Java实战之电影在线观看系统的实现
      本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
    • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
    • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
    • 如何实现织梦DedeCms全站伪静态
      本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
    • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
      Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
    • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
    • GetWindowLong函数
      今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
    • 基于layUI的图片上传前预览功能的2种实现方式
      本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
    • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
      本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
    • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
    • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
    • Oracle Database 10g许可授予信息及高级功能详解
      本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
    • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
    • Metasploit攻击渗透实践
      本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
    author-avatar
    朵彩的人生_688
    这个家伙很懒,什么也没留下!
    Tags | 热门标签
    RankList | 热门文章
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有