CodeIgniter MVC (模型-视图-控制器) 框架实例
什么是 MVC?
MVC 标准代表着模型-视图-控制器。它是一种将应用程序划分为三个主要组件的架构模式。
1. 模型负责业务逻辑和数据库交互
2. 控制器协调模型和视图之间的活动
3. 视图负责数据呈现
MVC 架构模式的一些优点如下:
- 低耦合——组件可以独立存在和运行。
- 灵活性——可以轻松地对单个组件进行更改
- 提高生产力——多人可以同时处理项目。前端开发人员可以处理视图和演示,而后端开发人员可以专注于模型,并且由于系统是松耦合的,最终会正常工作。
模型
模型负责与数据源进行交互。这通常是数据库,但也可以是提供所请求数据的服务。将业务逻辑包含在模型中而不是控制器中也是一种常见的做法。这种做法通常称为“肥模型瘦控制器”。
模型通常将数据写入数据库,提供编辑、更新和删除数据的机制。在现代 Web 应用程序中,模型使用数据访问设计模式(如活动记录)来简化数据库交互。
例如,CodeIgniter 使用内置的活动记录库来辅助模型,而 Laravel 等其他框架则使用 Eloquent 对象关系映射器 (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(‘No direct script access allowed’); 可防止在请求未通过 index.php 到达控制器时直接访问控制器。这是出于安全目的。
- class Welcome extends CI_Controller {…} 定义了 Welcome 控制器类并扩展了父类 CI_Controller。
- public function index(){…} 定义了响应 URL
https://:3000
的 index 方法。 - $this->load->view(‘welcome_message’); 加载位于 application/views 目录下的 welcome_message 视图。
现在我们将更新 index 方法,如下所示:
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’); 加载 customers 模型。
- $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 {…} 定义了 Customers_model 模型,它扩展了 CI_Model。
- public function get_customer($id) {…} 定义了基于客户 ID 的 get_customer 方法。
- $data[…] 定义了我们虚构客户的静态值。这应该是一个从数据库返回的行。
- return $data; 返回客户数据。
这就是我们的模型。现在我们来修改 welcome_message 视图。
打开位于 application/views 的 welcome_message.php。
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:
https://:3000/
您应该能看到客户卡片,如下图所示:
摘要
- MVC 是一种将应用程序划分为三个主要组件的架构模式。
- 模型负责与数据源进行交互。
- 控制器监听用户的传入资源请求。
- 在 Web 应用程序中,视图通常包含 HTML、CSS,以及可选的 JavaScript。
- 控制器接收用户请求,如有必要则与数据库模型交互,然后以 HTML 代码的形式将结果返回到浏览器。