我是Symfony2的新手......
我的问题:
如何确保捆绑包不直接相互引用?我试图让事情尽可能地松散耦合;在需要的地方可以有异常和依赖,但我不想开始构建许多相互引用的bundle。
示例:
在为网站添加一些简单的CMS功能时,我目前有这些捆绑包:
因此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。
选项:
将整个服务定义从src / AdminBundle / Resources / config / services.yml移动到app / config / config.yml(或者可能是包含的文件,如config_admin.yml)。但是,这似乎可能会使配置膨胀一些和/或导致服务定义中的重复。这些重大问题是什么?
更改参数行以使用参数,例如 参数:[null,%admin.entity.page%,null] 然后可以在app / config / config.yml中指定每个实体的参数。但是,如果我这么做,那么我最终可能会在“parameters”命名空间中输入大量条目,而我认为这不是它的预期用途?
使用服务容器扩展创建一个新服务,如下所述:http://symfony.com/doc/current/book/service_container.html#importing-configuration-via-container-extensions。说实话,我不确定这样的服务如何在sonata.admin组中注册并被Sonata Admin接收。
将整个定义保留在Resources / config / services.yml中,并且很高兴将来在那里进行更改仍然相对容易。
非常感谢任何帮助/评论;如果我的整个方法都错了,那么请说。 :)