2

我对 Symfony2 还很陌生...

我的问题:

如何确保捆绑包不直接相互引用?我试图让事情尽可能松散耦合;在需要的地方可能存在异常和依赖关系,但我不想开始构建许多相互引用的捆绑包。

例子:

在向网站添加一些简单的 CMS 功能时,我目前拥有以下捆绑包:

  • src: AdminBundle - 使用 Sonata Admin
  • src: MainBundle - 包含主站点和 Doctrine 实体类
  • 供应商:奏鸣曲管理员

因此 AdminBundle 需要使用 MainBundle 中提供的实体。结果,在 src/AdminBundle/Resources/config/services.yml 我有这样的条目:

services:
    pwn.admin.page:
        class: Pwn\AdminBundle\Admin\PageAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: Content, label: Pages }
        arguments: [null, Pwn\MainBundle\Entity\Page, null]

对 MainBundle 的引用是我试图避免的。如果需要,我希望可以很容易地指定不同的 ORM 对象,甚至可以从另一个包中指定。

总的来说,我正在努力做到只有 app/config/ 中的文件将所有组件粘合在一起。虽然,在某些情况下,我认为捆绑包具有紧密的单向依赖关系是可以的:我的 AdminBundle 依赖于 Sonata Admin。

选项:

  1. 将整个服务定义从 src/AdminBundle/Resources/config/services.yml 移动到 app/config/config.yml(或者可能包含的文件,如 config_admin.yml)。但是,这似乎可能会使配置膨胀一点和/或导致服务定义重复。这些是重大问题吗?

  2. 更改参数行以使用参数,例如参数:[null, %admin.entity.page%, null] 然后可以在 app/config/config.yml 中指定每个实体的参数。但是,如果我广泛地这样做,那么我最终可能会在“参数”命名空间中获得大量条目,我认为这不是它的预期用途吗?

  3. 使用服务容器扩展创建一个新服务,如下所述:http: //symfony.com/doc/current/book/service_container.html#importing-configuration-via-container-extensions。老实说,我不确定这样的服务如何在 sonata.admin 组中注册并被 Sonata Admin 接收。

  4. 将整个定义留在 Resources/config/services.yml 中,并且很高兴将来在那里进行更改仍然相对容易。

非常感谢任何帮助/评论;如果我的整个方法是错误的,那么请说。:)

4

0 回答 0