2016-11-29 102 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); 
    } 
}