7

Symfony2のconfig.ymlで、次のような「インポート」を追加できます。

imports:
    - { resource: services.yml }

私のservices.ymlの中には、次のものがあります。

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

ただし、バンドルのサービスを宣言する別の方法は、を使用し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の助けを借りてそれが可能です。

「複数のバンドルの構成を簡素化する方法」クックブックエントリをご覧ください。

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>

最後に、バンドル内:

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