2016-11-29 4 views
0

Zend Framework 3に基づいてサイトを開発していますが、一部のモジュールでは電子メールを送信する必要があります。モジュールサービスとコントローラからのローカルパラメータへのアクセス

私はそうするためにPERL Mailを使用しています。 Amazon SESサービスへの電子メールの送信要求をすべてプロダクションで行う予定で、開発用には無料のgmailアカウントを使用しています。

私のアプリケーションでは、project/config/autoload directoryというファイルにlocal.phpというファイルを使用してローカルにメール設定を保存したいとします。そうすれば、私は開発と生産の両方で異なる構成を持つことができます。

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

すべての罰金、私は私のモジュールのサービスやコントローラからこれらのパラメータを取得する方法を知っているドントことを除い:だから、I'veは私のlocal.phpファイルに次のエントリを作成しました。ここで

module/User/src/service/UserManagerServiceにある私は、このパラメータにアクセスする必要があるサービスの一例を、次のとおりです。これらのZF3工場へ

<?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); 
    } 
} 

- 私はかなり新しい:このサービスは、工場を持っている

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** 
    } 
} 

、サービス、コントローラーなど、私はここで少し失われています。

このサービスで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); 
    } 
} 
関連する問題