function ContentExportCommand::execute

Same name in this branch
  1. main core/lib/Drupal/Core/DefaultContent/ContentExportCommand.php \Drupal\Core\DefaultContent\ContentExportCommand::execute()
Same name and namespace in other branches
  1. 11.x core/lib/Drupal/Core/DefaultContent/ContentExportCommand.php \Drupal\Core\DefaultContent\ContentExportCommand::execute()
  2. 11.x core/lib/Drupal/Core/DefaultContent/Command/ContentExportCommand.php \Drupal\Core\DefaultContent\Command\ContentExportCommand::execute()

File

core/lib/Drupal/Core/DefaultContent/Command/ContentExportCommand.php, line 65

Class

ContentExportCommand
Exports content entities in YAML format.

Namespace

Drupal\Core\DefaultContent\Command

Code

protected function execute(InputInterface $input, OutputInterface $output) : int {
  $io = new SymfonyStyle($input, $output);
  $entity_type_id = $input->getArgument('entity_type_id');
  $entity_id = $input->getArgument('entity_id');
  $bundles = $input->getOption('bundle');
  if (!$this->entityTypeManager
    ->hasDefinition($entity_type_id)) {
    $io->error("The entity type \"{$entity_type_id}\" does not exist.");
    return Command::FAILURE;
  }
  if (!$this->entityTypeManager
    ->getDefinition($entity_type_id)
    ->entityClassImplements(ContentEntityInterface::class)) {
    $io->error("{$entity_type_id} is not a content entity type.");
    return Command::FAILURE;
  }
  // Confirm that all specified bundles exist.
  if ($bundles) {
    $unknown_bundles = array_diff($bundles, array_keys($this->entityBundleInfo
      ->getBundleInfo($entity_type_id)));
    if ($unknown_bundles) {
      $io->error("These bundles do not exist on the {$entity_type_id} entity type: " . implode(', ', $unknown_bundles));
      return Command::FAILURE;
    }
  }
  $dir = $input->getOption('dir');
  $with_dependencies = $input->getOption('with-dependencies');
  // If we're going to export multiple entities, or a single entity with its
  // dependencies, require the `--dir` option.
  if (empty($dir) && (empty($entity_id) || $with_dependencies)) {
    throw new RuntimeException('The --dir option is required to export multiple entities, or a single entity with its dependencies.');
  }
  $count = 0;
  $storage = $this->entityTypeManager
    ->getStorage($entity_type_id);
  foreach ($this->loadEntities($storage, $entity_id, $bundles) as $entity) {
    if ($with_dependencies) {
      $count += $this->exporter
        ->exportWithDependencies($entity, $dir);
    }
    elseif ($dir) {
      $this->exporter
        ->exportToFile($entity, $dir);
      $count++;
    }
    else {
      $io->write((string) $this->exporter
        ->export($entity));
      return Command::SUCCESS;
    }
  }
  // If we were trying to export a specific entity and it didn't get exported,
  // that's an error.
  if ($entity_id && $count === 0) {
    $io->error("{$entity_type_id} {$entity_id} does not exist.");
    if ($bundles) {
      $io->caution('Maybe this entity is not one of the specified bundles: ' . implode(', ', $bundles));
    }
    return Command::FAILURE;
  }
  $message = (string) $this->formatPlural($count, 'One entity was exported to @dir.', '@count entities were exported to @dir.', [
    '@dir' => $this->fileSystem
      ->realpath($dir),
  ]);
  $io->success($message);
  return Command::SUCCESS;
}

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