如何从第三捆绑软件覆盖第三捆绑软件的配置

时间:2018-07-13 07:42:43

标签: symfony config fosuserbundle

我在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%"

1 个答案:

答案 0 :(得分:1)

在您的CMSExtension类中,您可以实现PrependExtensionInterface并添加一个prepend方法。

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

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

    $container->prependExtensionConfig('fos_user', $newConfig);
}

在Symfony文档中查找this page