如何更改symfony 2原则映射程序,使其使用我的自定义目录,而不是捆绑包下的实体目录


How do I change symfony 2 doctrine mapper to use my custom directory instead of my Entity Directory under the bundle

我在symfony 2.3应用程序中使用条令。我想使用类似的文件夹结构

/MyBundleName/User/User.php

我的实体。

问题:

我是否可以直接显式映射原则ORM以使用显式目录,而不是默认为我的Bundle的Entity目录?

我想将所有相关文件保存在各自的目录中,如中的ProductProvider

/MyBundleName/Product/ProductProvider.php

如有任何帮助,我们将不胜感激。

为了进一步了解@Imanol的正确答案,可以将您的实体放在一个实体管理器下的多个目录中:

doctrine:
  orm:
    default_entity_manager:       default
    auto_generate_proxy_classes: %kernel.debug%
    entity_managers:
        default:
            connection: default
            mappings:
        test01:
            connection: test01
            mappings:
              product:
                type:      yml
                dir:       %kernel.root_dir%/../src/Cerad/Bundle/Test01Bundle/Product
                prefix:    Cerad'Bundle'Test01Bundle'Product
                alias:     Product
                is_bundle: false
              user:
                type:      yml
                dir:       %kernel.root_dir%/../src/Cerad/Bundle/Test01Bundle/User
                prefix:    Cerad'Bundle'Test01Bundle'User
                alias:     User
                is_bundle: false

不要担心is_bundle:false条目。实体仍然可以生活在一个捆绑包中。教条不在乎。如果你想知道,别名参数可以让你做一些事情,比如:

$repo = $em->getRepository("Product:Product");

您可以告诉Doctrine您的实体所在的目录

doctrine:
orm:
    auto_generate_proxy_classes: %kernel.debug%
    auto_mapping: false
    mappings:
        name:
            type: php
            dir: %kernel.root_dir%/../src/Company/CartoDBBundle/Tests/CartoDB/Entity

这里有完整的文档条令配置

几天前我提出了一个类似的问题,在那里你可以阅读Cedar给我的完整答案
类似的后

我花了一些时间试图找出最简单的情况。这就是我让它工作的方式:

doctrine:
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
        mappings:
            AppBundle:
                mapping: true
                type: annotation
                dir: Model
                alias: AppBundle
                prefix: 'AppBundle'Model'
                is_bundle: true

我只是想将我的实体存储在捆绑包中名为"Model"的目录中,而不是默认的"Entity"。