我创建了一个需要发送电子邮件的模块,并在其getServiceConfig中创建了一个邮件服务作为工厂。很简单。
$transport = $this->getServiceLocator()->get('custom_module_mail_transport');
// use transport
在Module.php中:
'custom_module_mail_transport' => function($instance, $sm) {
$b = new \Zend\Mail\Transport\Smtp();
$b->setOptions(
new \Zend\Mail\Transport\SmtpOptions(
array(
'host' => 'smtp.isp.com',
'connection_class' => 'login',
'port' => 25,
'connection_config' => array(
'username' => 'abc',
'password' => 'def',
)
)
)
);
return $b;
},
我希望人们能够自己动手,为自定义模块的邮件传输实现自己的工厂。我的意思是,我可以使用配置来获取密码等等,但过多的传输会使这一点无法解决。
将“custom_module_mail_transport”工厂添加到应用程序级服务配置似乎不起作用。目标是让用户滚动自己的工厂来覆盖模块提供的工厂。
最好的方法是什么?
感谢您帮助我绕过ZF2。
答案 0 :(得分:2)
将评论转换为答案,以便其他人可以(上/下)投票/改进。
有人可能有更好的解决方案,但我认为您可以使用允许用户定义的类类型实现您期望的通用接口的工厂。
请原谅元概述,但用户可以:
new $passed_module_config['custom_module_mail_transport_class']()
instanceof mailtransport_interface
(或您可能命名的任何内容)但是,我还没有真正使用过ZF2。