无法加载与捆绑包无关的实体

时间:2015-07-10 18:55:37

标签: symfony doctrine-orm

我正在构建一个公司Symfony2库,其中包含几个包和一个可供任何代码使用的类库。计划最终将其转换为内部包并通过composer将其安装到项目中,以便它将存在于供应商目录中。

该库的一个组件具有一对数据库实体类和与之关联的单个存储库类。

因为与这些类关联的唯一逻辑包含在存储库类中,所以用包来包围它是没有意义的。

到目前为止,我还无法让Doctrine加载此存储库。它最初以

失败了
  

在链配置的命名空间中找不到类'Dplh \ Library \ DplhEnum \ Entity \ EnumGroupRepository'Dplh \ DplhSecurityBundle \ Entity

异常。 (对我的安全捆绑的引用最初相当令人困惑。事实证明,这是Doctrine通过列出所有已知实体名称空间来帮助解决的问题(参见Symfony error The class XXX was not found in the chain configured namespaces XXX))。

据我了解,这是因为Doctrine配置为使用自动映射,并且期望在src / WhateverBundle / Entity目录中定义所有实体。

这可以通过config.yml(http://zalas.eu/how-to-store-doctrine-entities-outside-of-a-symfony-bundle/)中特定映射的其他Doctrine配置进行更改。

到目前为止,我一直无法使用它。我希望它在某个地方是一个小配置的东西。我在config.yml中添加了以下内容:

doctrine:
    dbal:
      # ...
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true

        mappings:
            DplhEnum:
                type:       annotation
                is_bundle:  false
                dir:        %kernel.root_dir%/../src/Dplh/Library/DplhEnum/Entity
                prefix:     Dplh\Library\DplhEnum\Entity
                alias:      DplhEnum

根据我对getRepository()的调用,我得到两个不同的例外。

// Using the fully-qualified class name.
$this->getEntityManager()->getRepository('Dplh\Library\DplhEnum\Entity\EnumGroup' )

抛出

  

尝试从命名空间“Dplh \ DplhEnumBundle \ Entity”加载类“EnumGroupRepository”。   您是否忘记了另一个命名空间的“use”语句?

// Using the alias.
$this->getEntityManager()->getRepository('DplhEnum\EnumGroup' )    

这会抛出

  

Class'DplhEnum \ EnumGroup'不存在

我已经验证 sum / Dplh / Library / DplhEnum / Entity 目录中的 EnumGroupRepository.php 文件和 EnumGroupRepository 类位于 Dplh \ Library \ DplhEnum \ Entity 名称空间中,并且它们位于正确的目录中。

0 个答案:

没有答案