zf2中的mongo-odm配置(模块/全局)

时间:2013-06-29 13:18:00

标签: php zend-framework2 doctrine-odm

我正在学习本教程

http://www.bigwisu.com/2012/10/03/zend-framework-2-doctrine-odm

当出现此错误时:

The class 'Application\Document\User' was not found in the chain configured namespaces 

经过一些测试后,这是我的module.doctrine-mongo-odm.local.php:

<?php
return array(
    'doctrine' => array(

        'connection' => array(
            'odm_default' => array(
                'server'    => 'localhost',
                'port'      => '27017',
                'user'      => '',
                'password'  => '',
                'dbname'    => 'test',
                'options'   => array()
            ),
        ),

        'configuration' => array(
            'odm_default' => array(
                'metadata_cache'     => 'array',
                'driver'             => 'odm_default',
                'generate_proxies'   => true,
                'proxy_dir'          => 'data/DoctrineMongoODMModule/Proxy',
                'proxy_namespace'    => 'DoctrineMongoODMModule\Proxy',

                'generate_hydrators' => true,
                'hydrator_dir'       => 'data/DoctrineMongoODMModule/Hydrator',
                'hydrator_namespace' => 'DoctrineMongoODMModule\Hydrator',

                'default_db'         => 'test',

                'filters'            => array(),  // array('filterName' => 'BSON\Filter\Class'),

                'logger'             => null // 'DoctrineMongoODMModule\Logging\DebugStack'
            )
        ),

        'odm_default' => array(
            'drivers' => array(
                'Application\Document' => 'odm_driver'
            )
        ),

        'odm_driver' => array(
            'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(
                'module/Application/src/Application/Document'
            ),
        ),

        'documentmanager' => array(
            'odm_default' => array(
                'connection'    => 'odm_default',
                'configuration' => 'odm_default',
                'eventmanager' => 'odm_default'
            )
        ),

        'eventmanager' => array(
            'odm_default' => array(
                'subscribers' => array()
            )
        ),
    ),
);

我可以通过将此信息添加到Application / config / module.config.php来修复错误,并将其从全局conf中删除:

<?php
namespace Application;
return array(
// routes, etc
'doctrine' => array(
    'driver' => array(
        'odm_driver' => array(
            'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
            'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Document')
        ),
        'odm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Document' => 'odm_driver'
            )
        )
    )
)

你能解释一下,为什么这有用吗?什么是最好的方法,因为我需要不同模块的odm?在每个module.config.php中定义它需要它吗?

1 个答案:

答案 0 :(得分:0)

使用我设法设置全局配置的配置玩了一点。

    'odm_driver' => array(
        'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
        'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Document')
    ),
    'odm_default' => array(
        'drivers' => array(
Change is here --> 'Admin\Document' => 'odm_driver'
        )
    )  

正如您所看到的,我已将 NAMESPACE 更改为严格的值,这就成了诀窍。真的不明白,直到ZF2中的新命名空间结束。