function Exporter::export

Exports a single content entity to a file.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The entity to export.

Return value

array{'_meta': array, 'default': array<array>, 'translations': array<string, array<array>>} The exported entity data.

File

core/lib/Drupal/Core/DefaultContent/Exporter.php, line 36

Class

Exporter
Handles exporting content entities.

Namespace

Drupal\Core\DefaultContent

Code

public function export(ContentEntityInterface $entity) : array {
  $event = new PreExportEvent($entity);
  $field_definitions = $entity->getFieldDefinitions();
  // Ignore serial (integer) entity IDs by default, along with a number of
  // other keys that aren't useful for default content.
  $id_key = $entity->getEntityType()
    ->getKey('id');
  if ($id_key && $field_definitions[$id_key]->getType() === 'integer') {
    $event->setEntityKeyExportable('id', FALSE);
  }
  $event->setEntityKeyExportable('uuid', FALSE);
  $event->setEntityKeyExportable('revision', FALSE);
  $event->setEntityKeyExportable('langcode', FALSE);
  $event->setEntityKeyExportable('bundle', FALSE);
  $event->setEntityKeyExportable('default_langcode', FALSE);
  $event->setEntityKeyExportable('revision_default', FALSE);
  $event->setEntityKeyExportable('revision_created', FALSE);
  // Default content has no history, so it doesn't make much sense to export
  // `changed` fields.
  foreach ($field_definitions as $name => $definition) {
    if ($definition->getType() === 'changed') {
      $event->setExportable($name, FALSE);
    }
  }
  // Exported user accounts should include the hashed password.
  $event->setCallback('field_item:password', function (PasswordItem $item) : array {
    return $item->set('pre_hashed', TRUE)
      ->getValue();
  });
  // Ensure that all entity reference fields mark the referenced entity as a
  // dependency of the entity being exported.
  $event->setCallback('field_item:entity_reference', $this->exportReference(...));
  $event->setCallback('field_item:file', $this->exportReference(...));
  $event->setCallback('field_item:image', $this->exportReference(...));
  // Dispatch the event so modules can add and customize export callbacks, and
  // mark certain fields as ignored.
  $this->eventDispatcher
    ->dispatch($event);
  $data = [];
  $metadata = new ExportMetadata($entity);
  foreach ($entity->getTranslationLanguages() as $langcode => $language) {
    $translation = $entity->getTranslation($langcode);
    $values = $this->exportTranslation($translation, $metadata, $event->getCallbacks(), $event->getAllowList());
    if ($translation->isDefaultTranslation()) {
      $data['default'] = $values;
    }
    else {
      $data['translations'][$langcode] = $values;
    }
  }
  // Add the metadata we've collected (e.g., dependencies) while exporting
  // this entity and its translations.
  $data['_meta'] = $metadata->get();
  return $data;
}

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