映射Zend Framework 2模块结构中的许多命名空间时的Doctrine错误

时间:2016-11-07 14:14:32

标签: php zend-framework doctrine-orm

我在尝试映射我的类结构时从Doctrine2收到错误。

My Zend Application的模块结构如下:

module
    ModuleOne
        config
            module_config.php
        src
            ModuleOne
                Entity
                    ClassOne.php
            ModuleOneAdmin
                Entity
                    ClassTwo.php
                    ClassTwoRepository.php
        Module.php
    ModuleTwo
        config
            module_config.php
        src
            ModuleTwo
                Entity
                    ClassThree.php
        Module.php

我在ModuleOne中有两个子名称空间,因此,我的自动加载器(在ModuleOne / Module.php中)以这种方式配置:

public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ . 'Admin' => __DIR__ . '/src/' . __NAMESPACE__ . 'Admin',
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__
            ),
        ),
    );
}

在ModuleOne / config / module_config.php中,配置了学说

'doctrine' => array(
    'driver' => array(
        __NAMESPACE__ . '_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(
                __DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
            )
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
            ),
        ),
    ),
)

我在另一个模块中使用ModuleOne和ModuleTwo(我没有在模块结构中指定以避免使其详尽无遗)拥有控制器和视图。

当我运行我的应用程序时,它会在需要实体存储库的行中获取并出错:

$repository = $this->getEm()->getRepository('ModuleOneAdmin\Entity\ClassTwo');

错误是:

The class 'ModuleOneAdmin\Entity\ClassTwo' was not found in the chain configured namespaces ModuleOne\Entity, ModuleTwo\Entity

我在StackOverflow和谷歌搜索的其他网站上搜索了很多关于此类问题的其他问题,但没有一个问题解决了我的问题。它就像Doctrine在其内部映射中找不到我的ModuleOneAdmin。是否有一些我缺少的配置?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我发现了问题,我没有在教条配置中包含admin实体文件夹驱动程序的路径。

使用下面的代码可以正常工作。

'doctrine' => array(
    'driver' => array(
        __NAMESPACE__ . '_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(
                __DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
            )
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver',
                __NAMESPACE__ . 'Admin\Entity' => __NAMESPACE__ . '_driver'
            ),
        ),
    ),
)