CodeIgniter MVC(模型视图控制器)框架及示例
什么是MVC?
MVC 是模型-视图-控制的标准。它是一种将应用程序分为三个主要组件的架构模式。
1.模型处理业务逻辑和数据库交互
2. 控制器协调模型和视图之间的活动
3.View负责数据呈现
以下是MVC架构模式的一些优点
- 松散耦合——组件彼此独立存在且发挥作用。
- 灵活性——可以轻松更改单个组件
- 提高生产力——多个人可以同时处理项目。前端开发人员可以处理视图和演示,而后端开发人员可以专注于模型,而且由于系统是松散耦合的,所以最终可以正常工作
型号
模型负责与数据源交互。这通常是数据库,但也可以是提供所请求数据的服务。将业务逻辑包含在模型中而不是控制器中也是一种常见做法。这种做法通常称为胖模型瘦控制器。
模型通常将数据写入数据库,提供编辑和更新以及删除数据的机制。在现代 Web 应用程序中,模型使用数据访问设计模式(例如活动记录)来使与数据库的交互更加容易。
例如,CodeIgniter 使用内置库 Active Record 来辅助模型,而其他框架(如 Laravel)则使用 Eloquent Object Relational Mapper (ORM) 来辅助数据访问。
控制器
控制器监听来自用户的资源请求。它充当模型和视图之间的中介,有时还执行一些业务规则。假设控制器收到在数据库中注册用户的请求。
控制器可以对已提交的内容执行数据验证,以确保已提交所有必需的参数。如果缺少某些内容,则用户将被重定向到注册页面,并显示相应的错误消息。控制器还可以通过检查提交的电子邮件地址是否已存在来请求模型执行更多验证。如果所有验证规则都通过,则控制器将数据提交给模型进行处理并等待响应。
一旦模型处理了信息并返回了肯定的响应,控制器就会加载适当的视图并将模型返回的数据作为参数传递。
查看
视图处理呈现给最终用户的数据。在 Web 应用程序中,视图通常包含 HTML、CSS 以及可选的 JavaScript。视图包含最少的编程代码。视图中包含的代码通常用于循环遍历从模型或辅助函数接收的数据集合,以清理数据或创建链接来编辑记录。大多数现代 Web 应用程序通常使用模板引擎来定义自己的语法,这些语法更像伪代码,设计人员可以轻松理解。使用 CodeIgniter 时,通常使用简短的 PHP 标签和控制结构。要在 CodeIgniter 中显示某些内容,可以使用以下代码
<?=$title?>
相对于
<?php echo $title; ?>
控制结构通常写成如下形式
<?php foreach ($customers as $customer): ?> <li> <p><?=$customer->first_name?><p> </li> <?php endforeach; ?>
从上面的示例中可以看出,视图将使用 PHP 和 HTML,而不是将所有内容都封装在纯 PHP 代码中。
MVC 框架如何工作?
下图展示了 MVC 框架的工作原理
控制器接收来自用户的请求,必要时与数据库模型交互,然后将结果以 HTML 代码的形式返回给浏览器,浏览器将其解释为人类可读的格式并显示给用户。
CodeIgniter 控制器
现在让我们分析一下将上述 URL 加载到 Web 浏览器中时发生了什么。
打开位于 application/controllers 的文件 Welcome.php 控制器
你应该能够看到以下代码
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
$this->load->view('welcome_message');
}
}
这里,
- defined('BASEPATH') OR exit('不允许直接脚本访问'); 如果请求不是通过index.php发出的,则阻止直接访问控制器。这是出于安全目的。
- class Welcome extends CI_Controller {…} 定义 Welcome 控制器类,并扩展父类 CI_Controller
- public function index(){…} 定义响应 URL 的 index 方法
http://localhost:3000 - $this->load->view('welcome_message'); 加载位于 application/views 目录中的视图 welcome_message
我们现在将更新索引方法如下
public function index()
{
$this->load->model('customers_model');
$data['customer'] = $this->customers_model->get_customer(3);
$this->load->view('welcome_message',$data);
}
这里,
- $this->load->model('customers_model'); 加载客户模型。
- $data['customer'] = $this->customers_model->get_customer(3); 调用 customers_model 的 get_customer 方法并传入参数 3。在此示例中,我们对值进行了硬编码,但在实际应用中,这将是来自 URI 的参数。
- $this->load->view('welcome_message',$data); 加载 welcome_message 视图并将 $data 变量传递给视图
CodeIgniter 模型
现在让我们创建上面代码中引用的视图。为简单起见,我们的模型不会与 数据库 但将返回静态客户记录。我们将在下一个教程中使用数据库。
在 application/models 中创建文件 Customers_model.php
添加以下代码
<?php
class Customers_model extends CI_Model {
public function get_customer($id) {
$data['id'] = 3;
$data['first_name'] = 'John';
$data['last_name'] = 'Doe';
$data['address'] = 'Kingstone';
return $data;
}
}
这里,
- class Customers_model extends CI_Model {…} 定义扩展 CI_Model 的模型 Customers_model。
- public function get_customer($id) {…} 根据客户 ID 定义获取客户的方法
- $data[…] 定义我们虚构客户的静态值。这应该是从数据库返回的一行。
- 返回$data;返回客户数据。
这就是我们的模型。现在让我们修改 welcome_message 视图
打开位于
application/views/welcome_message.php
将代码替换为以下内容
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>CodeIgniter MVC Basics</title> </head> <body> <h1>Customer Details Card</h1> <p>Customer ID : <strong><?=$customer['id']?></strong></p> <p>First Name : <strong><?=$customer['first_name']?></strong></p> <p>Last Name : <strong><?=$customer['last_name']?></strong></p> <p>Address : <strong><?=$customer['address']?></strong></p> </body> </html>
保存更改
在 Web 浏览器中加载以下 URL
http://localhost:3000/
您应该能够看到如下图所示的客户卡
结语
- MVC 是一种将应用程序拆分为三个主要组件的架构模式
- 该模型负责与数据源交互
- 控制器监听来自用户的资源请求
- 在 Web 应用程序中,视图通常包含 HTML、CSS,以及可选的 Java脚本
- 控制器接收用户的请求,必要时与数据库模型进行交互,然后将结果以 HTML 代码的形式返回给浏览器


