我正在构建一个公司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 名称空间中,并且它们位于正确的目录中。