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\DefaultContentCode
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.