与原则 2 和 ZF2 的辅助数据库连接


Secondary database connection with Doctrine 2 and ZF2

我正在尝试为我的教义配置添加额外的连接。 我的orm_default连接工作得很好,现在我正在尝试添加一个具有自己的 Doctrine 配置的新模块(主要是学习目的,但我很烦人,我无法让它工作)。

该模块称为 Frontpage,所有相关代码都在此模块中,除了驻留在本地.php

...

我的错误是

Zend'ServiceManager'Exception'ServiceNotCreatedException
An exception was raised while creating "doctrine.entitymanager.orm_hosts"; no instance returned

在堆栈跟踪(最后一个例外)的下方,我认为这是相关的,但不知道如何解决......

Zend'Stdlib'Exception'BadMethodCallException
The option "hydration_cache" does not have a matching setHydrationCache setter method which must be defined

这是我的模块配置(相关部分)文件:

'doctrine' => [
    'connection' => [
        'orm_hosts' => [
            'driverClass' => 'Doctrine'DBAL'Driver'PDOMySql'Driver',
            'params' => [
                'host' => '127.0.0.1',
                'port' => '3306',
                'dbname' => 'hosts',
            ],
        ],
    ],
    'entitymanager' => array(
        'orm_hosts' => array(
            'connection'    => 'orm_hosts',
            'configuration' => 'orm_hosts'
        )
    ),
    'configuration' => array(
        'orm_hosts' => array(
            'driver'            => 'orm_hosts',
            'generate_proxies'  => true,
            'proxy_dir'         => 'data/DoctrineORMModule/Proxy',
            'proxy_namespace'   => 'DoctrineORMModule'Proxy',
            'filters'           => array(),
            'metadata_cache'    => 'array',
            'query_cache'       => 'array',
            'result_cache'      => 'array',
            //'hydration_cache'   => 'array',
        )
    ),
    'driver' => array(
        'orm_hosts' => array(
            'class'   => 'Doctrine'ORM'Mapping'Driver'DriverChain',
            'drivers' => array(
                'Common'Entity' =>  'Hosts_Driver'
            )
        ),
        'Hosts_Driver' => array(
            'class' => 'Doctrine'ORM'Mapping'Driver'AnnotationDriver',
            'cache' => 'array',
            'paths' => array(
                __DIR__ . '/../src/Common/Entity'
            )
        ),
    ),
    'eventmanager' => array(
        'orm_hosts' => array()
    ),
    'sql_logger_collector' => array(
        'orm_hosts' => array(),
    ),
    'entity_resolver' => array(
        'orm_hosts' => array()
    ),
],

和我的模块.php的getServiceConfig():

public function getServiceConfig()
{
    return array(
        'factories' => array(
            'doctrine.connection.orm_hosts'           => new Service'DBALConnectionFactory('orm_hosts'),
            'doctrine.configuration.orm_hosts'        => new Service'ConfigurationFactory('orm_hosts'),
            'doctrine.entitymanager.orm_hosts'        => new Service'EntityManagerFactory('orm_hosts'),
            'doctrine.entity_resolver.orm_hosts'      => new Service'EntityResolverFactory('orm_hosts'),
            'doctrine.sql_logger_collector.orm_hosts' => new Service'SQLLoggerCollectorFactory('orm_hosts'),
            'doctrine.driver.orm_hosts'               => new 'DoctrineModule'Service'DriverFactory('orm_hosts'),
            'doctrine.eventmanager.orm_hosts'         => new 'DoctrineModule'Service'EventManagerFactory('orm_hosts'),
            'DoctrineORMModule'Form'Annotation'AnnotationBuilder'orm_hosts' => function('Zend'ServiceManager'ServiceLocatorInterface $sl) {
                return new 'DoctrineORMModule'Form'Annotation'AnnotationBuilder($sl->get('doctrine.entitymanager.orm_hosts'));
            },
        ),
    );
}

这是我在索引控制器中的getEntityManager()失败

/**
 * @return array|EntityManager|object
 */
public function getEntityManager() {
    if (NULL === $this->em) {
        /** @var 'Doctrine'ORM'EntityManager $em */
        $em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_hosts');
        //$em = $this->getServiceLocator()->get('doctrine')->getManager("orm_hosts");
        $this->em = $em;
    }
    return $this->em;
}

任何帮助将不胜感激:)

此致敬意理查

好的,所以我仍然不知道上面的代码有什么问题,但是如果我删除

'Hydration_cache' => 'array'

在我的模块配置的学说配置中,它实际上有效!不过,如果有人想解释发生了什么,我希望了解更多:)