在Symfony2的config.yml中,您可以添加“import”,例如:
imports:
- { resource: services.yml }
在我的services.yml中,我有:
imports:
security_bundle:
resource: @AcmeSecurityBundle/Resources/config/services.yml
然而,为bundle声明服务的另一种方法是使用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
的情况下从另一个捆绑包添加第三方捆绑包的配置?
答案 0 :(得分:9)
在Symfony 2.2中,可以借助PrependExtensionInterface。
看看“如何简化多个捆绑包的配置”菜谱条目:
http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html
答案 1 :(得分:0)
我认为这是可能的,使用捆绑包中的DependencyInjection \ YourBundleExtension类,然后执行
public function load(array $configs, ContainerBuilder $container)
{
...
$container->setParameter('the_bundle_parameter.you.want.to.override',$itsValue);
...
}
但我真的不知道它是否是最佳实践......
答案 2 :(得分:-1)
我找到了一个解决方案,将过滤器放在bundle中而不是root config.yml
中avalanche_imagine:
web_root: %kernel.root_dir%/../web
cache_prefix: media/cache
driver: gd
bundle: PathToYourBundleClass
AvalancheImagineExtension:加载添加:
$bundleClass = $container->getParameter("imagine.bundle");
if ($bundleClass)
{
$bundle = new $bundleClass();
$bundle->getContainerExtension()->load(array(), $container);
}
AvalancheImagineExtension /资源/配置/ config.xml中
<parameter key="imagine.bundle"></parameter>
最后,在你的包中:
parameters:
imagine.filters:
image_main:
type: thumbnail
options: { size: [490, 310], mode: outbound }