Symfony2:是否可以通过DependencyInjection为另一个包添加配置?

Kas*_*een 7 symfony liipimaginebundle

在Symfony2的config.yml中,您可以添加"导入",例如:

imports:
    - { resource: services.yml }
Run Code Online (Sandbox Code Playgroud)

在我的services.yml里面,我有:

imports:
    security_bundle:
      resource: @AcmeSecurityBundle/Resources/config/services.yml
Run Code Online (Sandbox Code Playgroud)

然而,为bundle声明服务的替代方法是使用a,DependencyInjection Extension从而消除了手动将任何内容导入config.yml的需要,从而解耦代码.

namespace Acme\Bundle\SecurityBundle\DependencyInjection;

use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;

class AcmeSecurityExtension extends Extension {

    public function load(array $configs, ContainerBuilder $container) {
        $loader = new YamlFileLoader(
            $container, new FileLocator(__DIR__ . '/../Resources/config')
        );
        $loader->load('services.yml');
    }

}
Run Code Online (Sandbox Code Playgroud)

问题 这适用于服务声明,但是比如你想要一个包来配置另一个包,比如添加LiipImagineBundle(就像AvalancheImagineBundle)过滤器:

liip_imagine:
    filter_sets:
      security_avatar_thumbnail:
        quality: 75
        filters:
          thumbnail: { size: [140, 140], mode: inset }
Run Code Online (Sandbox Code Playgroud)

然后Symfony抱怨说

没有可以加载"liip_imagine"配置的扩展程序

那么有谁知道是否有办法从另一个包中添加第三方包的配置而不触及config.yml

dr.*_*cre 9

在Symfony 2.2中,可以借助PrependExtensionInterface.

看看"如何简化多个捆绑包的配置"菜谱条目:

http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html