function FieldDefinitionListener::onFieldDefinitionDelete

Same name in other branches
  1. 8.9.x core/lib/Drupal/Core/Field/FieldDefinitionListener.php \Drupal\Core\Field\FieldDefinitionListener::onFieldDefinitionDelete()
  2. 10 core/lib/Drupal/Core/Field/FieldDefinitionListener.php \Drupal\Core\Field\FieldDefinitionListener::onFieldDefinitionDelete()
  3. 11.x core/lib/Drupal/Core/Field/FieldDefinitionListener.php \Drupal\Core\Field\FieldDefinitionListener::onFieldDefinitionDelete()

Overrides FieldDefinitionListenerInterface::onFieldDefinitionDelete

File

core/lib/Drupal/Core/Field/FieldDefinitionListener.php, line 116

Class

FieldDefinitionListener
Reacts to field definition CRUD on behalf of the Entity system.

Namespace

Drupal\Core\Field

Code

public function onFieldDefinitionDelete(FieldDefinitionInterface $field_definition) {
    $entity_type_id = $field_definition->getTargetEntityTypeId();
    $bundle = $field_definition->getTargetBundle();
    $field_name = $field_definition->getName();
    // Notify the storage about the field deletion.
    $this->entityTypeManager
        ->getStorage($entity_type_id)
        ->onFieldDefinitionDelete($field_definition);
    // Unset the bundle from the bundle field map key value collection.
    $bundle_field_map = $this->keyValueFactory
        ->get('entity.definitions.bundle_field_map')
        ->get($entity_type_id);
    unset($bundle_field_map[$field_name]['bundles'][$bundle]);
    if (empty($bundle_field_map[$field_name]['bundles'])) {
        // If there are no bundles left, remove the field from the map.
        unset($bundle_field_map[$field_name]);
    }
    $this->keyValueFactory
        ->get('entity.definitions.bundle_field_map')
        ->set($entity_type_id, $bundle_field_map);
    // Delete the cache entry.
    $this->cacheBackend
        ->delete('entity_field_map');
    // If the field map is initialized, update it as well, so that calls to it
    // do not have to rebuild it again.
    if ($field_map = $this->entityFieldManager
        ->getFieldMap()) {
        unset($field_map[$entity_type_id][$field_name]['bundles'][$bundle]);
        if (empty($field_map[$entity_type_id][$field_name]['bundles'])) {
            unset($field_map[$entity_type_id][$field_name]);
        }
        $this->entityFieldManager
            ->setFieldMap($field_map);
    }
}

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