You are here

public function EntityNormalizer::denormalize in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/serialization/src/Normalizer/EntityNormalizer.php \Drupal\serialization\Normalizer\EntityNormalizer::denormalize()
  2. 9 core/modules/serialization/src/Normalizer/EntityNormalizer.php \Drupal\serialization\Normalizer\EntityNormalizer::denormalize()

File

core/modules/serialization/src/Normalizer/EntityNormalizer.php, line 43

Class

EntityNormalizer
Normalizes/denormalizes Drupal entity objects into an array structure.

Namespace

Drupal\serialization\Normalizer

Code

public function denormalize($data, $class, $format = NULL, array $context = []) : mixed {
  $entity_type_id = $this
    ->determineEntityTypeId($class, $context);
  $entity_type_definition = $this
    ->getEntityTypeDefinition($entity_type_id);

  // The bundle property will be required to denormalize a bundleable
  // fieldable entity.
  if ($entity_type_definition
    ->entityClassImplements(FieldableEntityInterface::class)) {

    // Extract bundle data to pass into entity creation if the entity type uses
    // bundles.
    if ($entity_type_definition
      ->hasKey('bundle')) {

      // Get an array containing the bundle only. This also remove the bundle
      // key from the $data array.
      $create_params = $this
        ->extractBundleData($data, $entity_type_definition);
    }
    else {
      $create_params = [];
    }

    // Create the entity from bundle data only, then apply field values after.
    $entity = $this->entityTypeManager
      ->getStorage($entity_type_id)
      ->create($create_params);
    $this
      ->denormalizeFieldData($data, $entity, $format, $context);
  }
  else {

    // Create the entity from all data.
    $entity = $this->entityTypeManager
      ->getStorage($entity_type_id)
      ->create($data);
  }

  // Pass the names of the fields whose values can be merged.
  // @todo https://www.drupal.org/node/2456257 remove this.
  $entity->_restSubmittedFields = array_keys($data);
  return $entity;
}