CodeIgniter是一个MVC开发模式的PHP框架,其中的M就是model模型的意思,但是这个M在真正的开发中到底应该发挥什么样的作用呢,我想大多数新手都会混用MVC,从而让MVC模式失去了它被设计出来的意义,本文将从我个人的开发经验以及对于这一模型的理解进行一个简单的讲解。
首先上实战
如果还没有配置好网站或者CodeIgniter,请先翻看我的上一篇博客 为你的网站配置一个小巧的框架( CodeIgniter)
如果一切都已经就绪,HERE WE GO
1. 打开 application/config/database.php 文件设置数据库参数。
需要补全的内容有hostname、username、password、database,如下:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',###服务器
'username' => 'root',###用户名称
'password' => 'halo',###用户密码
'database' => 'lockeyDB',###需要连接的数据库
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
注意:如果数据库在项目中用到的地方比较多的话需要设置自动加载连接:
[root@rhel6-vm application]# vim config/autoload.php
$autoload['libraries'] = array('database');
配置完成之后重新启动web服务器使配置生效。
2. 编写第一个model文件
以下例子假设我们连接的数据库中有个数据表User
[root@rhel6-vm models]# cat User_model.php
<?php
class User_model extends CI_Model {
public function get_last_ten_users()
{
$query = $this->db->get('User', 10);
#从lockeyDB数据库的User表中查询最后十条数据
return $query->result();
#将结果返回,一般会在控制器中调用model
}
}
3. 修改我们的控制器来调用模型
/usr/local/nginx/html/application/controllers/auth
[root@rhel6-vm auth]# cat Login.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends CI_Controller {
public function index()
{
$this->load->model('User_model');
#加载用户模型
$result['data'] = $this->User_model->get_last_ten_users();
#调用模型函数获取数据
$this->load->view('auth/login.php',$result);
#将数据传到view视图中进行显示
}
}
4. 修改视图来接受视图和控制器传递的数据
[root@rhel6-vm auth]# pwd
/usr/local/nginx/html/application/views/auth
[root@rhel6-vm auth]# cat login.php
<h1 style="font-size:1.5em;text-align:center;color:olive"> Users list: </h1>
<?php
var_dump($data);
?>
5. 测试结果
接下来讲点理论
MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写。MVC框架是指应用了MVC设计模式的框架。
Model:数据业务存取,无关数据逻辑处理,基本都是数据库操作
Controller:
- 监听 Model 层的事件,将 Model 层的数据按逻辑处理并传递到 View 层。
- 监听 View 层的事件,并且将 View 层的事件和附带数据进行逻辑处理后转发到 Model 层。
View:数据呈现
以一个栗子:
假设我们的网站中有一个用户管理模块,可以实现用户的增删查改;
那么model负责的内容:就是增删查改的数据库层面操作
control层:请求与回应的向上或者向下转发,并且做了一部分的后端数据验证和处理,使得model和view拿到的数据立马就可以用,而不用再去进行不必要的逻辑处理
view层:将由control层传递回来的应答数据与html、css、javascript等前端元素结合,给用户一个良好的展现(用户信息的展示);或者将用户的一个请求操作发送到control层,如添加用户、删除用户、修改用户(附带数据)操作
总结:model(我只关心数据库),view(我只关心数据和请求结果),control(最累,数据处理、请求转发)。