如何从第三个bundle覆盖第三个绑定包的配置



我正在Symfony 4中制作一个捆绑包,但在我的捆绑包中我使用FOSUserBundle。因此,我想从我自己的捆绑包中定义FOSUserBundle的配置,而不是从主配置中定义。怎么做?它无法识别节点

没有扩展能够加载"fos_user"的配置(在C:\wamp64\www\MyProject\src\CMSBundle\DependencyInjection/../Resources/config\fos_user.yaml中(。查找命名空间"fos_uuser",未找到

如果我在CMSExtension.php 中加载FOSUserBundle的配置(FOS\UserBundle\DependencyInjection/configuration.php(

我收到这个消息

必须配置路径"fos_user"处的子节点"db_driver"。

结构

/src
/CMSBundle
/Controller
/DependencyInjection
CMSExtension.php
/Entity
/Repository
/Resources
/config
fos_user.yaml
routing.yaml
security.yaml
services.yaml
CMSBundle.php

src/CMSBundle/DependencyInjection/CMSExtension.php

class CMSExtension extends Extension {
public function load(array $configs, ContainerBuilder $container) {
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__ . '/../Resources/config')
);
$loader->load('services.yaml');
$loader->load('security.yaml');
$loader->load('fos_user.yaml');
}
}

src/CMSBundle/Resourcers/config/fos_user.yaml

fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: srcCMSBundleEntityUser
from_email:
address: "%mailer_user%"
sender_name: "%mailer_user%"

CMSExtension类中,可以实现PrependExtensionInterface并添加prepend方法。

在这种方法中,您将能够覆盖FOSUserBundle配置:

/**
* {@inheritdoc}
*/
public function prepend(ContainerBuilder $container)
{
$newConfig = [
'db_driver' => '',
...
];
$container->prependExtensionConfig('fos_user', $newConfig);
}

在Symfony文档中查看此页。

最新更新