Symfony2 - 试图将捆绑包分开

时间:2012-09-28 08:50:57

标签: php symfony

我是Symfony2的新手......

我的问题:

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

示例:

在为网站添加一些简单的CMS功能时,我目前有这些捆绑包:

  • src:AdminBundle - 使用Sonata Admin
  • src:MainBundle - 包含主站点和Doctrine实体类
  • 供应商:Sonata-Admin

因此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中指定每个实体的参数。但是,如果我这么做,那么我最终可能会在“parameters”命名空间中输入大量条目,而我认为这不是它的预期用途?

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

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

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

0 个答案:

没有答案