function ConfigEntityBase::preSave

Same name and namespace in other branches
  1. 11.x core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php \Drupal\Core\Config\Entity\ConfigEntityBase::preSave()
  2. 10 core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php \Drupal\Core\Config\Entity\ConfigEntityBase::preSave()
  3. 9 core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php \Drupal\Core\Config\Entity\ConfigEntityBase::preSave()
2 methods override ConfigEntityBase::preSave()
FieldConfig::preSave in core/modules/field/src/Entity/FieldConfig.php
Overrides \Drupal\Core\Entity\Entity::preSave().
FilterFormat::preSave in core/modules/filter/src/Entity/FilterFormat.php
Acts on an entity before the presave hook is invoked.

File

core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php, line 285

Class

ConfigEntityBase
Defines a base configuration entity class.

Namespace

Drupal\Core\Config\Entity

Code

public function preSave(EntityStorageInterface $storage) {
  parent::preSave($storage);
  if ($this instanceof EntityWithPluginCollectionInterface) {
    // Any changes to the plugin configuration must be saved to the entity's
    // copy as well.
    foreach ($this->getPluginCollections() as $plugin_config_key => $plugin_collection) {
      $this->set($plugin_config_key, $plugin_collection->getConfiguration());
    }
  }
  // Ensure this entity's UUID does not exist with a different ID, regardless
  // of whether it's new or updated.
  $matching_entities = $storage->getQuery()
    ->condition('uuid', $this->uuid())
    ->execute();
  $matched_entity = reset($matching_entities);
  if (!empty($matched_entity) && $matched_entity != $this->id() && $matched_entity != $this->getOriginalId()) {
    throw new ConfigDuplicateUUIDException("Attempt to save a configuration entity '{$this->id()}' with UUID '{$this->uuid()}' when this UUID is already used for '{$matched_entity}'");
  }
  // If this entity is not new, load the original entity for comparison.
  if (!$this->isNew()) {
    $original = $storage->loadUnchanged($this->getOriginalId());
    // Ensure that the UUID cannot be changed for an existing entity.
    if ($original && $original->uuid() != $this->uuid()) {
      throw new ConfigDuplicateUUIDException("Attempt to save a configuration entity '{$this->id()}' with UUID '{$this->uuid()}' when this entity already exists with UUID '{$original->uuid()}'");
    }
  }
  if (!$this->isSyncing()) {
    // Ensure the correct dependencies are present. If the configuration is
    // being written during a configuration synchronization then there is no
    // need to recalculate the dependencies.
    $this->calculateDependencies();
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.