【问题标题】:Zend Mail - Where to instantiate it?Zend Mail - 在哪里实例化它?
【发布时间】:2011-08-21 23:07:12
【问题描述】:

我正在使用数据映射器/网关设计模式。

所以我有一个:

映射器; 网关; 域对象(主要是 getter 和 setter); 控制器; 一个视图。

我的问题是:我应该在哪里实例化 Zend Mail ? 我相信这种观点显然是毫无疑问的,网关也不值得考虑。

控制器应该保持清洁,所以:

映射我们的域对象?

如果我们的表单有一些从数据库中检索数据的选择框,那么,也许 Mapper 将是最适合实例化 Zend Mail 的地方?

谢谢

【问题讨论】:

  • 我注意到我们还没有一个标准的方法来完成它。我喜欢这个服务理念,但我自然倾向于避免自己提供服务。我也很难将代码放入控制器中,因为似乎没有一个单一的解决方案,也许解决这个问题的最好方法是继续编码,看看它是如何最适合的。我会将您的两个问题都标记为有用,但我不能将它们标记为答案,因为我还没有找到一个完全满足并证明自己的问题。这可能是因为,它实际上取决于我们发送邮件任务的性质。同样,代码会告诉你。谢谢你们。
  • 是的,我在控制器中发送邮件(如@Perfect)或推送到服务中(如@Jerry Saravia)。永远不要在映射器或存储库中。

标签: zend-framework zend-mail


【解决方案1】:

我总是将发送邮件的代码保存在我的控制器中。

模型 - 数据库/业务逻辑

视图 - html / 表示层

Controller - 做事的代码。

【讨论】:

    【解决方案2】:

    嗯?使用 Zend,您可以在引导程序中或使用 application.ini 文件或其他一些配置文件来配置 Zend_Mail。这就是我现在配置我的方式。对于开发人员,我会将邮件写入文件,而对于测试,我将通过实际的邮件服务器发送邮件。

    我在一个名为 Mail_Service 的类中实例化我的 Zend_Mail 实例。这个邮件服务类在需要发送邮件时会在内部创建一个 Zend_Mail 实例,如果已经创建了一个 Zend_Mail 实例并且需要发送更多邮件,它将使用现有的 Zend_Mail 实例。

    它有可以为我发送预定义邮件的方法。例如,

    Mail_Service->sendWelcomeEmail( $userInfo )

    Mail_Service->sendActivationEmail( $userInfo )

    比如说我的控制器收到一个创建新用户的请求,那么我的代码的整体流程将是这样的

    //在控制器中 //以某种方式从浏览器处理表单 UserAccountService->createNewUser($userInfo); //////////////// /// 在用户帐户服务中 公共函数 createNewUser( $userInfo ) { $userMapper->createNewUser($userInfo); $preferencesMapper->createDefaultPreferencesForUser( $userInfo ); MailService->sendWelcomeEmail($userInfo); }

    我不知道这是否是最好的方法,但这样我的服务就有了功能 与服务相关的名称并捕获整个工作流,而不是仅将调用转发给其他对象的原子操作。

    希望这会有所帮助。

    【讨论】:

    • 但是您是否需要以某种方式撰写电子邮件?喜欢:“用户名”,“用户密码”并将其发送到电子邮件。这些数据将来自数据源。该 userInfo 是一个数组还是一个对象,然后您将其上的信息拆分到“sendWelcomeEmail”中?
    • 嘿,UserInfo 只是一个像你说的那样具有简单字符串属性的对象。在邮件服务中,我使用 Zend_View 对象在我的电子邮件模板文件夹中“渲染”一个 .php 文件。我采用呈现的字符串并将其用作电子邮件的文本。我创建了 Zend_View 对象,用于在 MailService 中进行渲染,但您也可以从 FrontController 中提取它。
    猜你喜欢
    • 2014-12-28
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多