【发布时间】:2026-02-03 08:00:01
【问题描述】:
我想做什么?
我正在尝试用 PHP 创建一个小应用程序来管理用户请求和注册。我没有使用任何 MVC 框架,但我想让它遵循 MVC,因为我想对其进行扩展并重用某些组件的代码。
我的问题:
如果Controller不管理View,如何在发送前访问邮件的最终呈现(内容+格式)?
我希望以哪些准则为基础?
我已经阅读了一些关于 Web 应用程序中的 MVC 的文章,我打算满足以下规范:
-
模型:
模型以最简单的形式存储视图访问和控制器写入的数据。该模型是系统所有部分中最复杂的,它将包含特定于应用程序的所有逻辑,以及与现实世界概念(例如“用户”或“订单”)相关的领域实体的存储位置.它是应用程序的一部分,它获取数据(来自任何来源)并对其进行处理。该模型还处理所有数据访问和存储。它不知道任何可能使用它的控制器或视图。
-
观点:
视图包含所有显示逻辑。在 PHP 中,它将是生成 HTML 的应用程序的一部分。它可以直接访问模型并可以查询模型以获取其数据。视图可以创建对其控制器的回调(例如,单击视图中的按钮将触发控制器中的操作)。在 MVC 中,视图查询模型以请求自己的数据。
-
控制者:
控制器接受用户输入并在需要时更新模型。如果没有用户交互(例如,显示静态数据集并且每次都相同),则不需要控制器。需要注意的是,控制器不是视图和模型之间的中介或网关。视图从其模型中获取自己的数据。控制器访问模型,但本身不包含任何显示逻辑。控制器所做的只是响应用户输入。 需要注意的是,控制器不负责实例化模型或视图。每个控制器都链接到视图的单个实例和模型的单个实例。
上面的规范可以用following diagram来概括
尝试使用 Mailing Case 来做到这一点
所以我假设控制器是要发送电子邮件的,而视图是要准备电子邮件演示的。
上一张图的更详细版本,adapted to the mailing case(请注意带有询问的不连续箭头,因为这是我的问题所在):
是否有保留以下一般程序流程?:
//initiate the triad
$model = new Model();
$controller = new Controller($model);
$view = new View($model);
$controller->{$UserRequest};
echo $view->output();
我没有找到任何解决方案。有什么我找不到的方法吗?
谢谢大家的帮助...
【问题讨论】:
-
对此有任何想法吗?也许
email不应该被视为在视图层中有其特定的模板?或者,也许email应该被视为不提供 UI 的纯文本? (因此,应该由控制器本身直接触发)
标签: php email model-view-controller registration contact-form