symfony 服务:仅覆盖一个参数

stl*_*loc 5 symfony

我有一个从 packagist.org 导入并位于供应商目录中的捆绑包
该捆绑包有一个带有参数的 services.yml 配置文件

parameters:
    myservice.class: ...
    myservice.options:
        MERCHANT_ID: '11223344556677'
        ACCESS_KEY: YourAccesKey
        ...
Run Code Online (Sandbox Code Playgroud)

我只想覆盖app/config/parameters.yml中的一个参数,但它会删除所有 myservice.options 数组

parameters:
    myservice.options:
        MERCHANT_ID: '99999999999999'
Run Code Online (Sandbox Code Playgroud)

如何只覆盖一个参数?

小智 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;
}
Run Code Online (Sandbox Code Playgroud)

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

your_bundle
    parameters:
        MERCHANT_ID: XXXXXX
Run Code Online (Sandbox Code Playgroud)