function Importer::importContent
Same name in other branches
- 10 core/lib/Drupal/Core/DefaultContent/Importer.php \Drupal\Core\DefaultContent\Importer::importContent()
Imports content entities from disk.
Parameters
\Drupal\Core\DefaultContent\Finder $content: The content finder, which has information on the entities to create in the necessary dependency order.
\Drupal\Core\DefaultContent\Existing $existing: (optional) What to do if one of the entities being imported already exists, by UUID:
- \Drupal\Core\DefaultContent\Existing::Error: Throw an exception.
- \Drupal\Core\DefaultContent\Existing::Skip: Leave the existing entity as-is.
Throws
\Drupal\Core\DefaultContent\ImportException
- If any of the entities being imported are not content entities.
- If any of the entities being imported already exists, by UUID, and $existing is \Drupal\Core\DefaultContent\Existing::Error.
File
-
core/
lib/ Drupal/ Core/ DefaultContent/ Importer.php, line 68
Class
- Importer
- A service for handling import of content.
Namespace
Drupal\Core\DefaultContentCode
public function importContent(Finder $content, Existing $existing = Existing::Error) : void {
if (count($content->data) === 0) {
return;
}
$account = $this->accountSwitcher
->switchToAdministrator();
try {
/** @var array{_meta: array<mixed>} $decoded */
foreach ($content->data as $decoded) {
[
'uuid' => $uuid,
'entity_type' => $entity_type_id,
'path' => $path,
] = $decoded['_meta'];
assert(is_string($uuid));
assert(is_string($entity_type_id));
assert(is_string($path));
$entity_type = $this->entityTypeManager
->getDefinition($entity_type_id);
/** @var \Drupal\Core\Entity\EntityTypeInterface $entity_type */
if (!$entity_type->entityClassImplements(ContentEntityInterface::class)) {
throw new ImportException("Content entity {$uuid} is a '{$entity_type_id}', which is not a content entity type.");
}
$entity = $this->entityRepository
->loadEntityByUuid($entity_type_id, $uuid);
if ($entity) {
if ($existing === Existing::Skip) {
continue;
}
else {
throw new ImportException("{$entity_type_id} {$uuid} already exists.");
}
}
$entity = $this->toEntity($decoded)
->enforceIsNew();
// Ensure that the entity is not owned by the anonymous user.
if ($entity instanceof EntityOwnerInterface && empty($entity->getOwnerId())) {
$entity->setOwnerId($account->id());
}
// If a file exists in the same folder, copy it to the designated
// target URI.
if ($entity instanceof FileInterface) {
$this->copyFileAssociatedWithEntity(dirname($path), $entity);
}
$violations = $entity->validate();
if (count($violations) > 0) {
throw new InvalidEntityException($violations, $path);
}
$entity->save();
}
} finally {
$this->accountSwitcher
->switchBack();
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.