当前位置: 代码迷 >> Web前端 >> 《军哥道CI框架》之入门教程之第四讲:模型和辅助函数
  详细解决方案

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

热度:249   发布时间:2013-01-26 13:47:03.0
《军哥谈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. <?php  
  2.      class User_model extends CI_Model {  
  3.     //获取用户信息  
  4.     public function get()  
  5.     {  
  6.         $data = '';  
  7.         //SQL语句的select部分,这里查询user表的所有字段  
  8.         $this->db->select("*");  
  9.        //运行选择查询语句并且返回结果集给$data  
  10.        $data = $this->db->get("user");  
  11.        return $data;  
  12.      }  
  13.      }  
  14. ?>
紧接着写控制器,起名为user.php,代码如下:
  1. <?php  
  2.      class User extends CI_Controller{  
  3.     //构造函数  
  4.     function __construct()  
  5.     {  
  6.        parent::__construct();  
  7.        //载入用户模型  
  8.        $this->load->model("User_model");  
  9.     }  
  10.     //显示用户信息列表  
  11.     public function index()  
  12.     {  
  13.         //调用用户模型中的get方法,将结果集返回给$query  
  14.         $query = $this->User_model->get();  
  15.         //将结果集作为关联数组返回  
  16.         $data['userList'] = $query->result_array();  
  17.         $this->load->view('user_index',$data);
  18.      }  
  19.      }  
  20. ?>
最后,我们开始写视图,代码如下:
  1. <html>  
  2.     <head>  
  3.         <meta http-equiv="content-type" content="text/html; charset=utf-8">  
  4.         <title>一个带模型的简单示例</title>  
  5.     </head>  
  6.     <body>  
  7.         <div>  
  8.             <table width="500px">  
  9.                 <tr>  
  10.                     <th>ID号</th>  
  11.                     <th>姓名</th>  
  12.                     <th>外号</th>  
  13.                     <th>性别</th>  
  14.                     <th>年龄</th>  
  15.                 </tr>  
  16.                 <?php foreach ($userList as $item): ?>  
  17.                 <tr style="text-align:center;">  
  18.                     <td><?php echo $item['id'] ;?></td>  
  19.                     <td><?php echo $item['name'] ;?></td>  
  20.                     <td><?php echo $item['nickname'] ;?></td>  
  21.                     <td><?php echo $item['sex'] ;?></td>  
  22.                     <td><?php echo $item['age'] ;?></td>  
  23.                 </tr>  
  24.                 <?php endforeach; ?>  
  25.             </table>  
  26.         </div>  
  27.     </body>  
  28. </html>

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

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




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. <?php  
  2.     echo anchor('jayjun/feadback','反馈&交流','title="反馈&交流"') ;
  3. ?>
等同于:
  1. <a href="http://yousite/index.php/jayjun/feadback" title="反馈&交流">反馈&交流</a>
(3)、“扩展”辅助函数。

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

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

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