# 模型、视图和控制器

## 什么是 MVC？

创建应用程序时，必须找到一种组织代码的方法，以便于定位正确的文件并简化维护。与大多数 Web 框架一样，CodeIgniter 使用模型、视图、控制器（MVC）模式来组织文件。这将应用程序中的数据、展示和流程作为独立的部分分开。

需要注意的是，对于每个元素的确切角色存在许多不同的观点，但本文档描述了我们对此的理解。如果你有不同的看法，可以自由地根据需要修改每个组件的使用方式。

模型 管理应用程序的数据，并帮助强制执行应用程序可能需要的任何特殊业务规则。

视图 是简单的文件，几乎没有逻辑，用于向用户显示信息。

控制器 充当胶水代码，在视图（或查看它的用户）和数据存储之间来回传递数据。

最基本地，控制器和模型只是具有特定职责的类。显然，它们并不是你唯一可以使用的类类型，但它们构成了该框架设计使用方式的核心。它们甚至在 app 目录中有指定的存储目录，尽管只要正确命名空间，你可以将它们存储在任何你想要的位置。我们将在下面更详细地讨论这一点。

让我们更仔细地看看这三个主要组件。

## 组件

### 视图

视图是最简单的文件，通常是 HTML 并带有少量的 PHP。PHP 代码应该非常简单，通常只是显示变量的内容，或循环遍历一些项目并在表格中显示它们的信息。

视图从控制器获取要显示的数据，控制器将其作为变量传递给视图，可以通过简单的 `echo` 调用显示。你也可以在视图中显示其他视图，这样在每一页中显示一个通用的页头或页脚就变得非常简单。

视图通常存储在 app/Views 目录中，但如果组织不当，可能会很快变得难以管理。CodeIgniter 不强制要求任何类型的组织方式，但一个好的经验法则是为每个控制器在 Views 目录中创建一个新目录。然后，按方法名称命名视图。这样以后查找起来会非常容易。例如，用户的个人资料可能在名为 `User` 的控制器和名为 `profile` 的方法中显示。你可以将此方法的视图文件存储在 app/Views/user/profile.php 中。

这种类型的组织方式作为基础习惯非常有效。有时你可能需要以不同的方式组织。这没有问题。只要 CodeIgniter 能找到文件，它就能显示它。

了解有关视图的更多信息

### 模型

模型的工作是维护应用程序中单一类型的数据。这可能是用户、博客文章、交易等。在这种情况下，模型的工作有两个部分：当数据从数据库中提取或存入时，强制执行业务规则；以及处理数据从数据库中的实际保存和检索。

对于许多开发者来说，困惑在于确定要强制执行哪些业务规则。这仅仅意味着数据上的任何限制或要求都由模型处理。这可能包括在保存之前将原始数据规范化以满足公司标准，或在将列传递给控制器之前以特定方式格式化。通过将这些业务需求保留在模型中，你不会在多个控制器中重复代码，也不会意外遗漏更新某个区域。

模型通常存储在 app/Models 目录中，尽管它们可以使用命名空间按你需要的方式进行分组。

了解有关模型的更多信息

### 控制器

控制器有几个不同的角色。最明显的一个是接收用户的输入，然后确定如何处理它。这通常涉及将数据传递给模型以保存，或从模型请求数据，然后将其传递给视图以进行显示。如果需要，这也包括加载其他实用类，以处理模型职责范围之外的专门任务。

控制器的另一个职责是处理与 HTTP 请求相关的所有内容——重定向、身份验证、网络安全、编码等。简而言之，控制器是确保人们被允许访问，并以他们可以使用的格式获取所需数据的地方。

控制器通常存储在 app/Controllers 目录中，尽管它们可以使用命名空间按你需要的方式进行分组。

了解有关控制器的更多信息