diff -u b/core/lib/Drupal/Core/Config/Config.php b/core/lib/Drupal/Core/Config/Config.php --- b/core/lib/Drupal/Core/Config/Config.php +++ b/core/lib/Drupal/Core/Config/Config.php @@ -314,7 +314,15 @@ */ public function hasOverrides($key = '') { if ($key) { - return isset($this->moduleOverrides[$key]) || isset($this->settingsOverrides[$key]); + $parts = explode('.', $key); + $override_exists = FALSE; + if (isset($this->moduleOverrides) && is_array($this->moduleOverrides)) { + $override_exists = NestedArray::keyExists($this->moduleOverrides, $parts); + } + if (!$override_exists && isset($this->settingsOverrides) && is_array($this->settingsOverrides)) { + $override_exists = NestedArray::keyExists($this->settingsOverrides, $parts); + } + return $override_exists; } return !empty($this->moduleOverrides) || !empty($this->settingsOverrides); } diff -u b/core/tests/Drupal/Tests/Core/Config/ConfigTest.php b/core/tests/Drupal/Tests/Core/Config/ConfigTest.php --- b/core/tests/Drupal/Tests/Core/Config/ConfigTest.php +++ b/core/tests/Drupal/Tests/Core/Config/ConfigTest.php @@ -504,6 +504,26 @@ 'a' => 'allTheSameValue', ], ], + [ + // Original data. + [ + 'a' => [ + 'b' => 'originalValue' + ], + ], + // Module overrides. + [ + 'a' => [ + 'b' => 'moduleValue' + ], + ], + // Setting overrides. + [ + 'a' => [ + 'b' => 'settingValue' + ], + ], + ], ]; } @@ -614,8 +634,12 @@ } else { $this->assertTrue($this->config->hasOverrides()); - foreach (array_keys($overridden_data) as $overridden_key) { - $this->assertTrue($this->config->hasOverrides($overridden_key)); + foreach ($overridden_data as $key => $value) { + // If there are nested overrides test a combined key. + if (is_array($value)) { + $key = $key . '.' . key($value); + } + $this->assertTrue($this->config->hasOverrides($key)); } }