function system_update_8805
Change the provider of the 'path_alias' entity type and its base fields.
File
-
core/
modules/ system/ system.install, line 2763
Code
function system_update_8805() {
// If the path alias module is not installed, it means that
// system_update_8803() ran as part of Drupal 8.8.0-alpha1, in which case we
// need to enable the module and change the provider of the 'path_alias'
// entity type.
if (!\Drupal::moduleHandler()->moduleExists('path_alias')) {
\Drupal::service('module_installer')->install([
'path_alias',
], FALSE);
/** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */
$last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository');
$entity_type = $last_installed_schema_repository->getLastInstalledDefinition('path_alias');
// Set the new class for the entity type.
$entity_type->setClass(PathAlias::class);
// Set the new provider for the entity type.
$reflection = new ReflectionClass($entity_type);
$property = $reflection->getProperty('provider');
$property->setAccessible(TRUE);
$property->setValue($entity_type, 'path_alias');
$last_installed_schema_repository->setLastInstalledDefinition($entity_type);
$field_storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions('path_alias');
foreach ($field_storage_definitions as $field_storage_definition) {
if ($field_storage_definition->isBaseField()) {
$field_storage_definition->setProvider('path_alias');
$last_installed_schema_repository->setLastInstalledFieldStorageDefinition($field_storage_definition);
}
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.