public function MigrateStub::createStub in Drupal 8
Same name and namespace in other branches
- 9 core/modules/migrate/src/MigrateStub.php \Drupal\migrate\MigrateStub::createStub()
Creates a stub.
Parameters
string $migration_id: The migration to stub.
array $source_ids: An array of source ids.
array $default_values: (optional) An array of default values to add to the stub.
bool $key_by_destination_ids: (optional) NULL or TRUE to force indexing of the return array by destination id keys (default), or FALSE to return the raw return value of the destination plugin's ::import() method. The return value from MigrateDestinationInterface::import() is very poorly defined as "The entity ID or an indication of success". In practice, the mapping systems expect and all destination plugins return an array of destination identifiers. Unfortunately these arrays are inconsistently keyed. The core destination plugins return a numerically indexed array of destination identifiers, but several contrib destinations return an array of identifiers indexed by the destination keys. This method will generally index all return arrays for consistency and to provide as much information as possible, but this parameter is added for backwards compatibility to allow accessing the original array.
Return value
array|false An array of destination ids for the new stub, keyed by destination id key, or false if the stub failed.
Throws
\Drupal\Component\Plugin\Exception\PluginException
\Drupal\Component\Plugin\Exception\PluginNotFoundException
\Drupal\migrate\MigrateException
Overrides MigrateStubInterface::createStub
File
- core/
modules/ migrate/ src/ MigrateStub.php, line 64
Class
- MigrateStub
- Provides the migrate stubbing service.
Namespace
Drupal\migrateCode
public function createStub($migration_id, array $source_ids, array $default_values = [], $key_by_destination_ids = NULL) {
$migrations = $this->migrationPluginManager
->createInstances([
$migration_id,
]);
if (!$migrations) {
throw new PluginNotFoundException($migration_id);
}
if (count($migrations) !== 1) {
throw new \LogicException(sprintf('Cannot stub derivable migration "%s". You must specify the id of a specific derivative to stub.', $migration_id));
}
$migration = reset($migrations);
$source_id_keys = array_keys($migration
->getSourcePlugin()
->getIds());
if (count($source_id_keys) !== count($source_ids)) {
throw new \InvalidArgumentException('Expected and provided source id counts do not match.');
}
if (array_keys($source_ids) === range(0, count($source_ids) - 1)) {
$source_ids = array_combine($source_id_keys, $source_ids);
}
$stub = $this
->doCreateStub($migration, $source_ids, $default_values);
// If the return from ::import is numerically indexed, and we aren't
// requesting the raw return value, index it associatively using the
// destination id keys.
if ($key_by_destination_ids !== FALSE && array_keys($stub) === range(0, count($stub) - 1)) {
$stub = array_combine(array_keys($migration
->getDestinationPlugin()
->getIds()), $stub);
}
return $stub;
}