2016-11-29 80 views
0

我正在开发一个基于Zend Framework 3的站点,并且在一些模块中我需要发送电子邮件。从模块服务和控制器访问本地参数

我正在使用PERL Mail来这样做。这将使所有的电子邮件发送请求发送到亚马逊SES服务的生产,并为开发我将使用免费的Gmail帐户。

在我的应用程序中,我想以本地方式使用local.php文件在project/config/autoload directory处存储邮件配置。通过这种方式,我可以为开发和生产提供不同的配置。所以,从来就创建了以下条目我local.php文件:

'mail' => [ 
    'host' => 'ssl://smtp.gmail.com', 
    'port' => '465', 
    'auth' => true, 
    'username' => '[email protected]', 
    'password' => 'mypassword', 
] 

一切都很好,但我不知道如何从我的服务模块和控制器得到这些参数。

这里是我需要访问这个参数的服务例如,位于module/User/src/service/UserManagerService

class UserManager 
{ 
    /** 
    * Doctrine entity manager. 
    * @var Doctrine\ORM\EntityManager 
    */ 
    private $entityManager; 

    public function __construct($entityManager) 
    { 
     $this->entityManager = $entityManager; 
    } 


    public function addUser($data) 
    { 
     **// Need to access the configuration data from here to send email** 
    } 
} 

该服务有一个工厂:

<?php 
namespace User\Service\Factory; 

use Interop\Container\ContainerInterface; 
use User\Service\UserManager; 

class UserManagerFactory 
{ 
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null) 
    {   
     $entityManager = $container->get('doctrine.entitymanager.orm_default'); 

     return new UserManager($entityManager); 
    } 
} 

I'm相当新的,这些工厂ZF3 ,服务和管理员,所以我很少迷失在这里。

如何在此服务中获取存储在local.php文件中的参数? 对于控制器,这种方法是否相同?

回答

2

该配置存储在Config下的容器中。您可以像获取服务或其他任何东西一样从容器中检索它。这适用于您从工厂的容器中检索到的任何内容(服务,控制器)。最佳做法是检索工厂内的配置选项并将其传递给服务或控制器。

你的工厂:

<?php 

namespace User\Service\Factory; 

use Interop\Container\ContainerInterface; 
use User\Service\UserManager; 

class UserManagerFactory 
{ 
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null) 
    { 
     $entityManager = $container->get('doctrine.entitymanager.orm_default'); 
     $config = $container->get('Config'); 

     return new UserManager($entityManager, $config['mail']); 

     /* Or write this as: 
     return new UserManager(
      $container->get('doctrine.entitymanager.orm_default'), 
      $container->get('Config')['mail'] 
     ); 
     */ 
    } 
} 

您服务:

<?php 

use Doctrine\ORM\EntityManager 

class UserManager 
{ 
    /** 
    * @var EntityManager 
    */ 
    private $entityManager; 

    /** 
    * @var array 
    */ 
    private $mailConfig; 

    public function __construct(EntityManager $entityManager, array $mailConfig) 
    { 
     $this->entityManager = $entityManager; 
     $this->mailConfig = $mailConfig; 
    } 

    public function addUser($data) 
    { 
     var_dump($this->mailConfig); 
    } 
}