【问题标题】:MVC & PHP: Mail templates (View) vs Sending (Controller)MVC 和 PHP:邮件模板(视图)与发送(控制器)
【发布时间】: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


【解决方案1】:

邮件通常被认为是“帮助类”的一部分。 实际上,邮件应该通过控制器类发送,但为了更清楚起见,在帮助程序中定义。 例如,您可以使用 phpMailer(在 MVC 中非常容易使用)。

【讨论】:

  • 能否提供一个涉及三个组件的序列示例,View 使用其中一个模板和查询到的数据呈现电子邮件格式Model,然后回调Controller发送邮件?我认为您的提议需要从 View 到其 Controller 的最终 回调,没有用户交互,目的是最终发送向发起请求的用户撰写电子邮件