diff --git a/core/lib/Drupal/Core/Entity/EntityTypeListener.php b/core/lib/Drupal/Core/Entity/EntityTypeListener.php index 4bf05404d9..f9b93c71cb 100644 --- a/core/lib/Drupal/Core/Entity/EntityTypeListener.php +++ b/core/lib/Drupal/Core/Entity/EntityTypeListener.php @@ -76,6 +76,7 @@ public function onEntityTypeCreate(EntityTypeInterface $entity_type) { $this->entityLastInstalledSchemaRepository->setLastInstalledFieldStorageDefinitions($entity_type_id, $this->entityFieldManager->getFieldStorageDefinitions($entity_type_id)); } + $this->clearCachedDefinitions(); $this->eventDispatcher->dispatch(EntityTypeEvents::CREATE, new EntityTypeEvent($entity_type)); } @@ -96,6 +97,7 @@ public function onEntityTypeUpdate(EntityTypeInterface $entity_type, EntityTypeI $this->entityLastInstalledSchemaRepository->setLastInstalledDefinition($entity_type); + $this->clearCachedDefinitions(); $this->eventDispatcher->dispatch(EntityTypeEvents::UPDATE, new EntityTypeEvent($entity_type, $original)); } @@ -118,6 +120,7 @@ public function onEntityTypeDelete(EntityTypeInterface $entity_type) { $this->entityLastInstalledSchemaRepository->deleteLastInstalledDefinition($entity_type_id); + $this->clearCachedDefinitions(); $this->eventDispatcher->dispatch(EntityTypeEvents::DELETE, new EntityTypeEvent($entity_type)); } @@ -140,8 +143,17 @@ public function onFieldableEntityTypeUpdate(EntityTypeInterface $entity_type, En $this->entityLastInstalledSchemaRepository->setLastInstalledFieldStorageDefinitions($entity_type_id, $field_storage_definitions); } + $this->clearCachedDefinitions(); $this->eventDispatcher->dispatch(EntityTypeEvents::UPDATE, new EntityTypeEvent($entity_type, $original)); } } + /** + * Clears necessary caches before dispatching entity/field definition events. + */ + protected function clearCachedDefinitions() { + $this->entityTypeManager->clearCachedDefinitions(); + $this->entityFieldManager->clearCachedFieldDefinitions(); + } + }