Yii2覆盖嵌套的配置参数

时间:2017-01-26 05:27:48

标签: merge yii2 config

我以这种方式合并我的配置:

$config = \yii\helpers\ArrayHelper::merge(
    (require (__DIR__ . '/../config/web.php')),
    (require __DIR__ . '/../config/overrides/web.php')
);

这是 config / web.php

$config = [
    'components' => [
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
                [
                    'class' => 'yii\log\EmailTarget',
                    'levels' => ['info'],
                    'categories' => ['parsingFailure'],
                    'logVars' => [],
                    'message' => [
                        'from' => ['system@host.com'],
                        'to' => ['support@host.com'],
                        'subject' => 'Message parsing failure',
                    ],
                ],
            ],
        ],
        //....some more components
    ]
];

以下是我尝试应用的覆盖 config / overrides / web.php

$config = [
    'components' => [
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [],
        ],
    ]
];

因此,我的目标是禁用本地配置中的日志记录。 当然它不起作用,因为 array_merge 的行为是不同的,没有任何内容被覆盖。

2 个答案:

答案 0 :(得分:2)

来自docs

  

如果两个数组都具有数组类型的元素且具有相同的键,则将执行递归合并。 [...]您可以使用yii\helpers\UnsetArrayValue对象取消上一个数组的值或yii\helpers\ReplaceArrayValue强制替换以前的值而不是递归合并。

所以你的第二个数组应该是

'targets' =>  new \yii\helpers\ReplaceArrayValue([]),

答案 1 :(得分:0)

如果您希望ArrayHelper覆盖某些内容,则它不能成为两个数组中的数组。例如,您可以将'targets' => []更改为'targets' => null