大家新年好!不知不觉我们来到了2013年,军哥祝大家在新的一年里身体儿杠杠滴,吃嘛嘛香,新年新气象,财源滚滚~~
今天我们来学习CI中的模型和辅助函数。
【本讲内容】
一、模型;
之前我们分别介绍了MVC模式中的C层和V层,而M层还没有谈到。现在我们来谈一谈。
了解什么是模型?如何创建一个简单的模型?怎样载入模型?
二、辅助函数。
当我们需要完成某些特定任务的时候,辅助函数将会派上用场啦。还记得军哥在第一讲中介绍CI能够为我们做什么的时候,讲到其中有一个好处是减少代码量,那CI的辅助函数就可以帮助我们做到这一点。
【具体内容】
1、模型。
(1)、什么是模型?
模型对于那些传统MVC方式的人来说是可选的。比如,我们之前讲的一些例子中就没有用到M层,那是由于我们暂时还没有涉及到与数据库的操作,一旦涉及到数据库操作,我们就要用M层了,因为模型(M)就是专门用来和数据库打交道的。
(2)、那怎么样创建一个模型呢?
其实模型就是一个PHP类,里面包含添加、删除、更新和统计数据等方法,我们来创建一个简单的看一下,代码如下:
- class User_model extends CI_Model {
- function __construct()
- {
- parent::__construct();
- }
- //执行获取数据操作
- function get()
- {
- //代码省略……
- }
- //执行添加数据操作
- function insert()
- {
- //代码省略……
- }
- //执行更新数据操作
- function update()
- {
- //代码省略……
- }
- //执行删除数据操作
- function delete()
- {
- //代码省略……
- }
- }
此时我们需要注意以下几点:
a、创建的模型类文件应该放在application/models/ 文件夹,文件名应该是模型类名的小写格式。例如上例当中的,文件名应该为user_model.php;
b、类名的首字母必须大写,其他字母小写;
c、确保你的类继承了基本模型类(CI_Model)。
那这样的模型文件建好了,该怎么用呢?
(3)、载入模型。
我们写好的模型是通过控制器来载入和引用的。载入模型在CI中有两种方式:
一种是手动载入,假如我们想载入上面那个模型类,那它可以很容易的在控制器中的方法中装载,就像这样:
- $this->load->model('User_model');
以上通常都放在控制器的构造函数中进行装载,毕竟这样只需要手动装载一次就够了。
另一种是自动载入,找到并打开 application/config/autoload.php 文件,然后在自动装载数组中加入这个模型,只要设置$autoload['model'] = array();为:
- $autoload['model'] = array('user_model');
- $this->User_model->add();
- $this->User_model->insert();
接下来军哥带大家写一个完整的例子,把之前讲的内容一起连贯起来,正好也复习一下。
由于我们会涉及到数据库操作,因此首先要进行数据库的配置,打开application/config/database.php文件,设置连接数据库的一些参数值,如下:
- $db['default']['hostname'] = 'localhost';
- $db['default']['username'] = '你的数据库主机名';
- $db['default']['password'] = '你的数据库密码';
- $db['default']['dbdriver'] = 'mysql';
- $db['default']['database'] = '你的数据库名';
上面只是设置了其中一部分的参数,想了解更多你可以浏览CI中国的中文手册,http://codeigniter.org.cn/user_guide/database/configuration.html 。
然后我们开始建一个数据表,这里叫user表,表结构如下:
- create table user (
- id int(11) auto_increment primary key not null,
- name varchar(30) not null default '',
- nickname varchar(50) not null default '',
- sex varchar(20) not null default '男',
- age int(11) not null default 0
- );
我们插入一条数据,如下:
- insert into user values(null,'JayJun','排骨哥','男','26');
- insert into user values(null,'浩哥','猥琐男','男','27');
- <?php
- class User_model extends CI_Model {
- //获取用户信息
- public function get()
- {
- $data = '';
- //SQL语句的select部分,这里查询user表的所有字段
- $this->db->select("*");
- //运行选择查询语句并且返回结果集给$data
- $data = $this->db->get("user");
- return $data;
- }
- }
- ?>
- <?php
- class User extends CI_Controller{
- //构造函数
- function __construct()
- {
- parent::__construct();
- //载入用户模型
- $this->load->model("User_model");
- }
- //显示用户信息列表
- public function index()
- {
- //调用用户模型中的get方法,将结果集返回给$query
- $query = $this->User_model->get();
- //将结果集作为关联数组返回
- $data['userList'] = $query->result_array();
- $this->load->view('user_index',$data);
- }
- }
- ?>
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>一个带模型的简单示例</title>
- </head>
- <body>
- <div>
- <table width="500px">
- <tr>
- <th>ID号</th>
- <th>姓名</th>
- <th>外号</th>
- <th>性别</th>
- <th>年龄</th>
- </tr>
- <?php foreach ($userList as $item): ?>
- <tr style="text-align:center;">
- <td><?php echo $item['id'] ;?></td>
- <td><?php echo $item['name'] ;?></td>
- <td><?php echo $item['nickname'] ;?></td>
- <td><?php echo $item['sex'] ;?></td>
- <td><?php echo $item['age'] ;?></td>
- </tr>
- <?php endforeach; ?>
- </table>
- </div>
- </body>
- </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 默认是没有载入辅助函数文件的,所以如果你想用辅助函数,就必须先载入它。 一旦被载入,辅助函数将全局可用,你可以在控制器和视图中使用它们。我们像这样载入辅助函数文件:
- $this->load->helper('辅助函数文件名字,不带_helper和.php后缀的那部分');
比方说,你想载入数组辅助函数文件,就像这样:
- $this->load->helper("array");
如果你想一次载入多个辅助函数,你可以这样做:
- $this->load->helper( array('helper1', 'helper2', 'helper3') );
比方说当载入一个URL辅助函数文件之后,我们就可以使用里面的某个函数了,像anchor(),它有三个可选参数:
- anchor(uri segments, text, attributes);
第二个参数是你想链接的名字;
第三个参数包含一组你想附加给链接的属性。
举个例子看一下:
- <?php
- echo anchor('jayjun/feadback','反馈&交流','title="反馈&交流"') ;
- ?>
- <a href="http://yousite/index.php/jayjun/feadback" title="反馈&交流">反馈&交流</a>
如果你想做的只是在原有的辅助函数文件中添加一些新的功能,比如,添加一两个新的方法,或者是修改一个方法;就不值得重写自己的辅助函数文件。在这种情况下,最好是“扩展”已有的辅助函数文件。
例如,军哥在写PHPer小站的搜素功能时,需要将搜索结果的二维数组重复值去掉(详情见:http://phpersite.sinaapp.com/index.php/jayjun/doc/start/2/cid/28/aid/62.html ),而原有的数组辅助函数文件中却没有函数能够做到,此时就要自定义一个函数来帮我们处理,也就是说"扩展"一个数组辅助函数文件,这时应该建立一个文件:application/helpers/MY_array_helper.php,将自定义的函数写进去即可在控制器中使用了。
下一讲,我们来学习如何使用CI中的类库和如何创建一个自己的类库。