Symfony 6.3
我想把实体放在多个目录中,现在我有一个这样的配置:
doctrine:
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App\Core:
is_bundle: false
type: attribute
dir: '%kernel.project_dir%/src/Core/Entity'
prefix: 'App\Core\Entity'
alias: AppCore
App\Shared:
is_bundle: false
type: attribute
dir: '%kernel.project_dir%/src/Shared/Entity'
prefix: 'App\Shared\Entity'
alias: AppShared
App\Chat:
is_bundle: false
type: attribute
dir: '%kernel.project_dir%/src/Chat/Entity'
prefix: 'App\Chat\Entity'
alias: AppChat
App\User:
is_bundle: false
type: attribute
dir: '%kernel.project_dir%/src/User/Entity'
prefix: 'App\User\Entity'
alias: AppUser
现在,如果我添加一个新的“模块”与实体的子文件夹,我应该添加一个新的配置。
有没有什么方法可以将这个配置应用到MySQL?类似这样:
doctrine:
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: attribute
dir: '%kernel.project_dir%/src/*/Entity'
prefix: 'App\Entity'
alias: App
我试着这样做,但它不起作用。
3条答案
按热度按时间5ssjco0h1#
你可以试试下面的配置。我不确定它是否有效,我还没有测试过。
我不确定其他类和Symfony DI容器内部会发生什么。
另外,不要忘记使用
services.yaml
文件中的排除列表禁用所有这些位置的自动加载器:fnatzsnv2#
看起来你是按域分割代码。
这个架构看起来像旧的Symfony bundle系统,如果你想简化你的symfony配置,你最好把这些目录声明为bundle。
只需添加一个文件和一些配置:
Core\CoreBundle.php
及其在PHP/PHP中的声明
从这里开始,将Map配置为bundle,Doctrine将自动在
Core\Entity
目录中查找实体。您可以阅读更多关于bundles here
请注意,Symfony不建议创建捆绑包,除非是可重用的组件。
不要创建任何捆绑包来组织应用程序逻辑
当Symfony 2.0发布时,应用程序使用bundle将其代码划分为逻辑功能:UserBundle,ProductBundle,VirtualBundle等。
如果您需要在项目中重用某些功能,请为其创建一个bundle(在私有存储库中,不要将其公开)。对于应用程序代码的其余部分,请使用PHP命名空间来组织代码,而不是bundle。
lo8azlld3#
我做了类似的事情--但是我使用了xmlMap。
schema/Order.OrderItem.xml:
<entity name="App\Domain\Order\OrderItem">
schema/Product.Inventory.xml:
<entity name="App\Domain\Product\Inventory">
所以实体名称告诉doctrine在哪里寻找实体类。我不知道它是否会以同样的方式处理注解/属性。(但由于XML有点被doctrine-extensions和XML破坏-我将不得不在不久的将来面对这个问题。)