MVC PHP - 从模型发送邮件

Posted

技术标签:

【中文标题】MVC PHP - 从模型发送邮件【英文标题】:MVC PHP - Sending mail from Model 【发布时间】:2011-06-28 09:23:10 【问题描述】:

每当我应该从模型或控制器发送邮件时,我都无法确定。事情是在我使用的控制器中

这是关于 php 的。

在控制器中:

if (Post::get())
   $this->model->registerUser( ... );
   $this->model->mailSendUserActivation();
   // assign something to view.

在模型中:

public function mailSendUserActivation()
    $mail = new \com\Mail();
    // assign stuff to mail from API classes and other functions in model.
    $mail->send();

这是正确的吗?还是真的应该从控制器发送邮件?

【问题讨论】:

【参考方案1】:

Model 应该描述您的域模型。Controller 应该处理与用户的交互。 发送邮件是一个动作,所以你应该在控制器中处理它。 如果发送电子邮件需要复杂的代码(比如多于几行),请考虑将其提取到一些帮助程序类中,以保持您的控制器苗条和凝聚力。所以我会把发送电子邮件的代码放在一些帮助类方法中,然后在控制器操作中调用它。

MVC on wikipedia的好解释

【讨论】:

此外,如果可能,请考虑在视图层中呈现您的邮件正文。一些 MVC 使这变得非常容易,并将演示文稿放在它所属的位置。这通常会带来优势,例如如果您系统中的视图层有许多方便的工具来为网页呈现 html,那么它也可以很容易地呈现 HTML 电子邮件。【参考方案2】:

如果需要,您应该从控制器发送邮件,从模型中读取数据等。

【讨论】:

【参考方案3】:

我对将应用程序逻辑和工作流放在控制器本身感到很困惑。发送业务电子邮件应该计入应用程序逻辑和工作流中,根据 MVC 架构,模型应该将应用程序逻辑和业务工作流作为它来保存就控制器而言,它是唯一了解所有业务工作流程和逻辑的对象,我很困惑,如果控制器应该被告知业务流程实现,或者它应该直接联系实现邮件服务的帮助程序类在你的情况下..但是,我看到,如果 Controller 从模型中获取消息的组合、主题和消息的其他属性,然后将它们传递给邮件程序帮助类,这在这里更有意义.. 因为模型仍然知道关于消息和控制器角色的详细信息可以只从模型中获取消息详细信息并将其传递给帮助程序类。在这种情况下,我很困惑,如果通过帮助程序类发送电子邮件时发生错误,是否应该通知模型,或者控制器将其记录到文件或将其呈现给 View.. 但是,考虑联系服务提供商来自模型直接确实有意义。在这种情况下,控制器只向模型发送请求,模型可以代表它联系服务提供商以完成工作并将输出传递给控制器​​,控制器可以进一步将其传递给查看或进一步处理......

【讨论】:

以上是关于MVC PHP - 从模型发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

从邮件功能php发送电子邮件

使用 PHP 从 localhost 发送邮件

关于从 php 发送电子邮件的意见

从 PHP 发送邮件 - 是我的错误还是邮件服务器的错误?

如何使用php从xampp发送具有匿名名称的电子邮件

从 PHP 脚本发送电子邮件的最佳做法是啥?