diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php index 0e071b8..de830f1 100644 --- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php +++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php @@ -250,10 +250,7 @@ protected function doSave($id, EntityInterface $entity) { } // Retrieve the desired properties and set them in config. - $record = $this->mapToStorageRecord($entity); - foreach ($record as $key => $value) { - $config->set($key, $value); - } + $config->setData($this->mapToStorageRecord($entity)); $config->save(); return $is_new ? SAVED_NEW : SAVED_UPDATED; diff --git a/core/modules/config/src/Tests/ConfigEntityNormalizeTest.php b/core/modules/config/src/Tests/ConfigEntityNormalizeTest.php new file mode 100644 index 0000000..5e52cfe --- /dev/null +++ b/core/modules/config/src/Tests/ConfigEntityNormalizeTest.php @@ -0,0 +1,41 @@ +installConfig(static::$modules); + } + + public function testNormalize() { + $config_entity = entity_create('config_test', array('id' => 'system', 'label' => 'foobar', 'weight' => 1)); + $config_entity->save(); + + // Modify stored config entity, this is comparable with a schema change. + $config = \Drupal::config('config_test.dynamic.system'); + $data = array( + 'label' => 'foobar', + 'additional_key' => TRUE + ) + $config->getRawData(); + $config->setData($data)->save(); + $this->assertNotIdentical($config_entity->toArray(), $config->getRawData(), 'Stored config entity is not is equivalent to config schema.'); + + $config_entity = entity_load('config_test', 'system', TRUE); + $config_entity->save(); + + $config = \Drupal::config('config_test.dynamic.system'); + $this->assertIdentical($config_entity->toArray(), $config->getRawData(), 'Stored config entity is equivalent to config schema.'); + } + +}