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 目录。
所以设置你的前缀,你应该很高兴。
我已将我的代码划分到 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 目录。
所以设置你的前缀,你应该很高兴。