基于Symfony2 bundle的应用程序配置合并到全局配置中

时间:2015-07-10 18:53:06

标签: php symfony

我目前正在构建一个相当大的Symfony 2应用程序,其中包含许多不断增加的捆绑包,我很难记住这些捆绑包。

我尝试将所有捆绑包保留在系统的每个模块中,这为我提供了一个易于管理的简单结构。我的app/config/config.yml很快就失去了控制权,这真是太好了。理解导入可以在这个文件中完成,这对我有所帮助,但是我想将每个包的特定配置移动到每个包中,这有助于保持这些包在我们的其他应用程序中可重用。

以下是我希望迁移到各个捆绑包的一些示例。

1)依赖注入

我们在所有内部捆绑包中使用JMSDiExtraBundle,因为我们发现它使开发更快更容易管理。

# Annotations/Config
jms_di_extra:
  locations:
    bundles:
      - AppBundle
      - BlogBundle
      - ContentBundle
      - StoreBundle
      - UserBundle

我希望将此块移动到每个个人捆绑config.yml或更好,但这将在每个捆绑DependencyInjection/AppBundleExtension.php中启用。

2)路由

用于路由配置,但每个捆绑包仍然需要包含在app/config/routing.yml内,留下一个非常大的无法管理的文件。

一些例子

app:
  resource: "@AppBundle/Controller"
  type:     annotation

blog:
  resource: "@BlogBundle/Controller"
  type:     annotation

content:
  resource: "@ContentBundle/Controller"
  type:     annotation

oneup_uploader:
  resource: .
  type:     uploader

3)OneUp上传器

这是我最大的一点,这个配置目前在我们使用的20多个捆绑包之间超过500行。以下是从app/config/uploader.yml导入config.yml的一些示例。如果我能以某种方式将这些内容纳入每个捆绑配置中,我会非常高兴!

# Uploader
oneup_uploader:
  mappings:
    bundle_name_reference1:
      frontend: blueimp
      storage:
        type: gaufrette
        filesystem: gaufrette.local_filesystem
    bundle_name_reference2:
      frontend: blueimp
      storage:
        type: gaufrette
        filesystem: gaufrette.local_filesystem

我的想法是将所有这些配置集中到每个单独的捆绑包中,只需更新AppKernel.php即可轻松启用/禁用它们。我假设所有这一切都是可能的,因为Symfony非常灵活,当涉及到这些较低级别的改动时,我只是有点迷失。

1 个答案:

答案 0 :(得分:0)

您只需添加

即可
oneup_uploader:
    #...

src/Vendor/WhateverBundle/Resources/config/services.yml

有一个关于如何从app / config解耦束的菜谱条目: How to Load Service Configuration inside a Bundle

我认为理想的低耦合解决方案是创建一个扩展另一个包的包(例如MyOneUpUploaderBundle)并在那里使用cookbook方法。