Zend Mail - 在哪里实例化它?

时间:2011-05-09 20:03:51

标签: zend-framework zend-mail

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

所以我有一个:

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

我的问题是:我应该在哪里实例化Zend Mail? 我认为这个观点显然是不可能的,而且网关也是不被考虑的。

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

映射我们的域对象?

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

由于

2 个答案:

答案 0 :(得分:2)

Hmmmm?使用Zend,您可以在引导程序中配置Zend_Mail,也可以使用application.ini文件或其他配置文件。这就是我现在配置我的方式。对于dev,我会将邮件写入文件并进行测试,我将通过实际的邮件服务器进行邮件。

我在一个叫做Mail_Service的类中实例化我的Zend_Mail实例。此邮件服务类将在需要发送邮件时在内部创建Zend_Mail实例,并且如果已创建一个Zend_Mail实例并且需要发送更多邮件,则将使用现有Zend_Mail实例。

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


Mail_Service->sendWelcomeEmail( $userInfo ) 

OR


Mail_Service->sendActivationEmail( $userInfo )

比方说,我的控制器获得创建新用户的请求,然后我的代码的全部流程将是这样的

//in the controller
//process form from browser somehow

UserAccountService->createNewUser( $userInfo );



/////////////////
/// Within the user account service

public function createNewUser( $userInfo )
{
    $userMapper->createNewUser( $userInfo );
    $preferencesMapper->createDefaultPreferencesForUser( $userInfo );

    MailService->sendWelcomeEmail( $userInfo );
}

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

希望这有帮助。

答案 1 :(得分:1)

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

模型 - 数据库/业务逻辑

查看 - html /表示层

控制器 - 执行操作的代码。