Symfony服务:覆盖仅一个参数

5

我有一个从packagist.org导入并位于vendor目录中的捆绑包。
这个捆绑包有一个services.yml配置文件,其中包含参数。

parameters:
    myservice.class: ...
    myservice.options:
        MERCHANT_ID: '11223344556677'
        ACCESS_KEY: YourAccesKey
        ...

我想在我的app/config/parameters.yml文件中覆盖仅一个参数,但它会删除我所有的service.options数组。
parameters:
    myservice.options:
        MERCHANT_ID: '99999999999999'

如何覆盖仅一个参数?

捆绑包应使用DIC配置来设置默认值,也许您应该向捆绑包提交拉取请求。如果您能告诉我们名称,可能我们可以提供帮助。 - M. Foti
我的捆绑包: https://packagist.org/packages/stloc/payline-bundle。我希望未来的用户定义自己的标识符。 - stloc
有不同的解决方案,如拉取请求,但最好的方法是使用参数文件。 - stloc
1个回答

4
你应该暴露你的包配置,操作文档在这里:http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class。下面是一段代码基础,对于数组的每个参数都应该进行此操作。
// ACME/YourBundle/DependencyInjection/Configuration.php
class Configuration implements ConfigurationInterface
{

    public function getConfigTreeBuilder()
    {

        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('your_bundle');

        $rootNode
                ->children()
                ->arrayNode('parameters')
                        ->prototype('array')
                            ->treatNullLike(array())
                            ->children()
                                ->scalarNode('MERCHANT_ID')
                                    ->isRequired()
                                    ->cannotBeEmpty()
                                ->end()
                                    [...] // Another node
                            ->end()
                        ->end()
                    ->end()
               ->end()
            ->end()
    ;

    return $treeBuilder;
}

然后每个用户在他的config.yml文件中将定义他的私有参数:

your_bundle
    parameters:
        MERCHANT_ID: XXXXXX

我开发了一个简单的测试,其中包含一个名为test的简单标量值,而/app/config/config.yml覆盖不会替换默认值。 - stloc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接