7

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

imports:
    - { resource: services.yml }

在我的 services.yml 中,我有:

imports:
    security_bundle:
      resource: @AcmeSecurityBundle/Resources/config/services.yml

然而,为捆绑声明服务的另一种方法是使用 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');
    }

}

问题 这适用于服务声明,但例如您希望一个捆绑包配置另一个捆绑包,例如添加LiipImagineBundle(就像AvalancheImagineBundle)过滤器:

liip_imagine:
    filter_sets:
      security_avatar_thumbnail:
        quality: 75
        filters:
          thumbnail: { size: [140, 140], mode: inset }

Symfony 然后抱怨说

没有扩展能够加载“liip_imagine”的配置

那么有谁知道是否有一种方法可以从另一个捆绑包中添加第三方捆绑包的配置而无需触摸config.yml

4

3 回答 3

9

在 Symfony 2.2 中,可以借助 PrependExtensionInterface。

看看“如何简化多个 Bundles 的配置”食谱条目:

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

于 2013-03-12T23:00:47.397 回答
0

我认为这是可能的,在你的包中使用 DependencyInjection\YourBundleExtension 类,然后做一个

public function load(array $configs, ContainerBuilder $container)
{
    ...
    $container->setParameter('the_bundle_parameter.you.want.to.override',$itsValue);
    ...
}

但我真的不知道这是否是最佳做法......

于 2012-02-29T20:08:08.130 回答
-1

我找到了将过滤器放在包中而不是根 config.yml 中的解决方案

avalanche_imagine:
    web_root:     %kernel.root_dir%/../web
    cache_prefix: media/cache
    driver:       gd
    bundle: PathToYourBundleClass

AvalancheImagineExtension:load 添加这个:

    $bundleClass = $container->getParameter("imagine.bundle");
    if ($bundleClass)
    {
        $bundle = new $bundleClass();
        $bundle->getContainerExtension()->load(array(), $container);
    }

AvalancheImagineExtension/Resources/config/config.xml

<parameter key="imagine.bundle"></parameter>

最后,在你的 bundle 中:

parameters:
    imagine.filters:
        image_main:
            type:    thumbnail
            options: { size: [490, 310], mode: outbound }
于 2012-09-18T10:13:09.160 回答