symfony - 如何从第三个捆绑包中覆盖第三个捆绑包的配置
问题描述
我在 Symfony 4 中制作一个包,但在我的包中我使用 FOSUserBundle。所以我想从我自己的包而不是主配置中定义 FOSUserBundle 的配置。怎么做 ?它不识别节点
没有扩展能够加载“fos_user”的配置(在 C:\wamp64\www\MyProject\src\CMSBundle\DependencyInjection/../Resources/config\fos_user.yaml)。寻找命名空间“fos_user”,没有找到
如果我在我的 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: src\CMSBundle\Entity\User
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 文档中查看此页面。
推荐阅读
- python - 如何编写一个递归函数来计算几年后的硬币净值?
- r - Optim() 函数以小数为单位变化?
- oracle-apex - 将应用程序导入/导出到新环境时的 Oracle APEX 应用程序安全性
- visual-studio - 是否可以将 Visual Studio 2019 配置为在解决方案资源管理器中对旧样式和新 SDK 样式项目进行相同处理?
- jinja2 - 在这种情况下,模数 (%) 是什么意思?(姜戈)
- python - 通过以下索引连接单词
- json - 替换文件中模式的实例
- c - 分配给自引用结构指针的大小是多少
- python-3.x - Python - 尝试登录类
- python - 如何让用户输入 Python?