Symfony3 yml 实体映射在包内,实体 类 在包外

Symfony3 yml entity mappings inside bundle, entity classes outside bundle

我已将我的代码划分到 AppBundle 中,它将包含与框架相关的任何内容(包括原则内容),以及另一个用于业务逻辑的命名空间。

所以基本上我有这样的文件结构:

└── src
    ├── AppBundle
    │   └── Resources
    │       └── config
    │           └── doctrine
    │               ├── Attributes.orm.yml
    │               └── User.orm.yml
    └── Logic
        └── User
            ├── Attributes.php
            └── User.php

映射看起来像这样:

Logic\User\User:
    type: entity
    table: user
    id: (...)
    fields: (...)
    embedded:
        attributes:
            class: Logic\User\Attributes

和属性映射:

Logic\User\Attributes:
    type: embeddable
    fields: (...)

现在,当我尝试更新架构时,出现错误:

./sf doctrine:schema:update --dump-sql


  [Doctrine\Common\Persistence\Mapping\MappingException]  
  Class 'AppBundle\Entity\Attributes' does not exist      

所以基本上找到并处理了映射,但是 symfony 忽略了我在映射中编写的 类 的命名空间,并试图在 bundle 实体目录中找到它。我该怎么做才能修复它?

Doctrine 映射配置在这里定义:http://symfony.com/doc/current/reference/configuration/doctrine.html#mapping-configuration

特别是您需要将 dir 设置为您的映射目录并将前缀设置为实体名称空间。

规则: default_entity_manager:默认 auto_generate_proxy_classes: %kernel.debug%

    entity_managers:

        default:
            connection: default
            mappings:
                CeradOrgBundle:    ~
                CeradUserBundle:   ~
                CeradPersonBundle: ~

        games:
           connection: games
           mappings:
                CeradGameBundle: 
                    dir:    Resources/config/doctrine2
                    prefix: Cerad\Bundle\GameBundle\Doctrine\Entity

在上面的例子中,我创建了两个实体管理器。默认实体管理器使用标准直接布局处理各种包。

游戏管理器展示了如何自定义映射信息。在这种情况下,orm 文件位于 doctrine2 目录而不是 doctrine。

前缀是您感兴趣的内容。请注意,这些实体位于 DoctrineEntity 下,而不仅仅是普通的 Entity 目录。

所以设置你的前缀,你应该很高兴。