添加无需配置的自定义ORM映射

时间:2019-05-08 08:11:12

标签: symfony doctrine

我创建了一个使用composer安装的捆绑软件,其中的实体位于以下文件夹结构中:

Components\Product\Entity\Product.php
Components\Category\Entity\Category.php
...

因此,在安装捆绑软件时,我将编辑我的应用程序的配置文件以添加正确的映射,例如:

doctrine:
    orm:
        mappings:
            type: annotation
            dir: "%kernel.project_dir%/vendor/my-custom/bundle/Components/Product/Entity"
            prefix: 'My\Custom\Bundle'
            alias: MyCustomBundle

每个文件夹都有这个

因此,在安装捆绑软件时,要进行很多其他配置,以便为所有这些实体添加映射。

是否可以在包中定义这些映射?最好是使用听众或其他东西?

我实际上试图实现的是可以在应用程序中定义实体,如下所示:

my_bundle:
    entities: 
        product_entity: App\Entity\Product
        category_entity: App\Entity\Category

如果您未定义它们,则将使用捆绑软件中的默认实体(因此product_entity将为Components\Category\Entity\Product

所以我想做的就是遍历所有这些实体,并手动映射它们,简而言之,我希望能够做到这一点:

$doctrine->mapEntity(
    $parameterBag->get('product_entity')
);

希望这有道理! :-)

1 个答案:

答案 0 :(得分:3)

您可以使用 loadClassMetadata 学说事件创建事件处理程序 https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/events.html#lifecycle-events

  1. 您在包内设置了映射(例如,在/Resources/config/doctrine_mapping.yml中)
  2. 您可以在所有捆绑包的自定义处理程序中检查此配置
  3. 利润

获取捆绑包: 容器中的“ kernel.bundles_metadata”参数