模型、视图和控制器
什么是 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 目录中,尽管它们可以使用命名空间按你需要的方式进行分组。