【问题标题】:Yii2 override nested config parametersYii2 覆盖嵌套的配置参数
【发布时间】:2017-01-26 05:27:48
【问题描述】:

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

$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 的行为是不同的,并且没有任何内容被覆盖。

【问题讨论】:

    标签: merge yii2 config


    【解决方案1】:

    来自docs

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 它不会起作用,因为这种合并的结果将是所有组件的完全覆盖,只剩下组件['log']。
      • 是的,它将覆盖所有组件,因为默认array_merge 将仅合并第一级数组。如果您希望 ArrayHelper 覆盖某些内容,则它不能是两个数组中的数组。例如,您可以将'targets' => [] 更改为'targets' => null
      • +1 最后一条语句。第一部分不正确,应该删除,因为第一个数组在 components 数组中有其他元素。
      • 如果你设置了targets = null,那么当Logger处理targets应该是一个数组的时候就会出错。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2015-11-23
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多