diff --git a/core/lib/Drupal/Core/Config/TypedConfigManager.php b/core/lib/Drupal/Core/Config/TypedConfigManager.php index 36ff68b..cad220c 100644 --- a/core/lib/Drupal/Core/Config/TypedConfigManager.php +++ b/core/lib/Drupal/Core/Config/TypedConfigManager.php @@ -175,10 +175,11 @@ protected function getDefinitionWithReplacements($base_plugin_id, array $replace // definition. $definition = NestedArray::mergeDeepArray([$definitions[$sub_type], $definition], TRUE); } - - // Unset type so we try the merge only once per type. - unset($definition['type']); - $this->definitions[$type] = $definition; + else { + // Unset type so we try the merge only once per type. + unset($definition['type']); + $this->definitions[$type] = $definition; + } } // Add type and default definition class. $definition += array( diff --git a/core/modules/config/src/Tests/ConfigSchemaTest.php b/core/modules/config/src/Tests/ConfigSchemaTest.php index 74e543b..56fe862 100644 --- a/core/modules/config/src/Tests/ConfigSchemaTest.php +++ b/core/modules/config/src/Tests/ConfigSchemaTest.php @@ -546,8 +546,40 @@ public function testConfigSaveWithWrappingSchemaDoubleBrackets() { 'tests' => [ [ 'wrapper_value' => 'foo', + 'foo' => 'turtle', + 'bar' => 'horse', + // Converted to a string by 'test.double_brackets.turtle.horse' + // schema. + 'another_key' => '100', + ], + ], + ]; + + $typed_values = [ + 'tests' => [ + [ + 'wrapper_value' => 'foo', + 'foo' => 'turtle', + 'bar' => 'horse', + 'another_key' => 100, + ], + ], + ]; + + // Save config which has a schema that enforces types. + \Drupal::configFactory()->getEditable('wrapping.config_schema_test.double_brackets') + ->setData($untyped_values) + ->save(); + $this->assertIdentical(\Drupal::config('wrapping.config_schema_test.double_brackets') + ->get(), $typed_values); + + $untyped_values = [ + 'tests' => [ + [ + 'wrapper_value' => 'foo', 'foo' => 'cat', 'bar' => 'dog', + // Converted to a string by 'test.double_brackets.cat.dog' schema. 'another_key' => 100, ], ], diff --git a/core/modules/config/tests/config_schema_test/config/schema/config_schema_test.schema.yml b/core/modules/config/tests/config_schema_test/config/schema/config_schema_test.schema.yml index d7ec9a5..f96bb8b 100644 --- a/core/modules/config/tests/config_schema_test/config/schema/config_schema_test.schema.yml +++ b/core/modules/config/tests/config_schema_test/config/schema/config_schema_test.schema.yml @@ -258,5 +258,15 @@ test.double_brackets.cat.dog: bar: type: string +test.double_brackets.turtle.horse: + type: test.double_brackets + mapping: + another_key: + type: integer + foo: + type: string + bar: + type: string + test.double_brackets.*: type: mapping