Php 从模块服务和控制器访问本地参数

Php 从模块服务和控制器访问本地参数,php,zend-framework,zend-framework3,zf3,Php,Zend Framework,Zend Framework3,Zf3,我正在开发一个基于Zend Framework 3的网站,在一些模块中我需要发送电子邮件 我正在使用PERL邮件来实现这一点。它将把所有的电子邮件发送到亚马逊SES服务的生产,并为发展我使用一个免费的gmail帐户 在我的应用程序中,我想使用project/config/autoload目录下的local.php文件以本地方式存储邮件配置。这样,我可以为开发和生产提供不同的配置。因此,我在我的local.php文件中创建了以下条目: 'mail' => [ 'host' =>

我正在开发一个基于Zend Framework 3的网站,在一些模块中我需要发送电子邮件

我正在使用PERL邮件来实现这一点。它将把所有的电子邮件发送到亚马逊SES服务的生产,并为发展我使用一个免费的gmail帐户

在我的应用程序中,我想使用
project/config/autoload目录下的
local.php
文件以本地方式存储邮件配置。这样,我可以为开发和生产提供不同的配置。因此,我在我的
local.php
文件中创建了以下条目:

'mail' => [
   'host' => 'ssl://smtp.gmail.com',
   'port' => '465',
   'auth' => true,
   'username' => 'myusername@mydomain.com',
   '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);
    }
}

配置存储在容器中的
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']
        );
        */
    }
}

配置存储在容器中的
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']
        );
        */
    }
}