FuelPHP - 架构概述
FuelPHP 基于久经考验的 模型-视图-控制器 架构以及 HMVC(分层 MVC) 支持。虽然 MVC 提供了灵活和分层的应用程序开发,但 HMVC 更进一步实现了 Web 应用程序的小部件化。
FuelPHP 的优势在于它不强制使用特定的方式来开发应用程序。它只是提供了一个简单易用的标准结构。开发人员可以自由使用 FuelPHP 提供的预定义功能集,也可以在需要时对其进行修改。FuelPHP 提供的所有功能(包括核心功能)都可以根据应用程序的要求进行更改。
模型
模型是应用程序的业务实体。控制器和视图以模型的形式交换数据。模型可以统一表示我们的业务数据。它使数据库层能够以标准方式与 Web 应用程序层交互,并提供选择、保存、编辑和删除数据库实体的选项。
控制器
典型的 MVC 应用程序从控制器开始。一旦用户向 FuelPHP Web 应用程序发送请求,应用程序就会收集有关该请求的所有信息并将其发送给控制器。控制器执行所请求页面所需的业务逻辑,然后以模型的形式调用相关视图以及处理后的数据。
视图
视图是 MVC 应用程序的表示层。视图决定如何向用户显示模型。它支持从简单的数据呈现到高级布局,使网站能够在所有页面上规范设计。视图还提供主题支持,从而可以在整个应用程序中快速更改设计。
Presenter
Presenter 是 FuelPHP 提供的一项特殊功能。它是控制器和视图之间的粘合剂。控制器可以共享其部分低级职责,例如从数据库检索模型、为视图生成数据等。控制器调用 Presenter 而不是视图,视图又调用视图。Presenter 实现了业务逻辑和表示层的完全分离。
分层 MVC
FuelPHP 提供了一个从另一个控制器调用一个控制器的选项,类似于来自客户端(浏览器)的请求。如果任何控制器调用另一个控制器,被调用的控制器将向调用控制器返回响应,而不是将其呈现给客户端(浏览器)。这启用了 Web 应用程序的小部件化。例如,评论部分可以显示为独立页面,也可以显示为主页(博客)的子部分。
模块
FuelPHP 的一个显着特点是可以将 Web 应用程序的一部分转换为模块,这些模块可以在不同的应用程序之间共享。例如,只需将模块代码从源应用程序复制到目标应用程序,即可在另一个应用程序中重用为应用程序创建的博客模块。
请注意,创建新模块与开发主应用程序一样简单。结构类似于主应用程序,唯一的不同之处在于模块应该编码一个单独的文件夹。
包
FuelPHP 提供了一个选项,可以将代码组织成一个称为包的单元。包可以包含 Web 应用程序所需的一个或多个功能。例如,可以将数据库组件(如 ORM、电子邮件等)组织成一个包并在需要时使用。
包与模块的不同之处在于包不包含任何网页或部分网页。包可以在 FuelPHP 以及任何其他 PHP 框架中使用。
工作流程
FuelPHP 的工作流程简单易懂。如下图所示。
用户向应用程序发送请求。
控制器接收请求并通过与模型交互来收集信息,模型又与数据库交互。
控制器通过向其他控制器发送子请求与其他控制器交互来收集信息。
控制器将检索到的模型发送到视图,视图又生成演示文稿并将其作为响应发送到客户端。
在某些情况下,控制器可能会将控制权传递给演示者。在这种情况下,演示者从模型收集信息并将其发送到客户端。在这里,演示者不执行任何业务逻辑,除了从数据库中检索模型。