diff --git a/jsonapi.services.yml b/jsonapi.services.yml index bc3669e..ce9c2bd 100644 --- a/jsonapi.services.yml +++ b/jsonapi.services.yml @@ -173,6 +173,11 @@ services: - [setSchemaFactory, ['@?schemata.schema_factory']] # This is only injected when the service is available. tags: - { name: event_subscriber, priority: 1000 } + jsonapi.field_storage_definition.subscriber: + class: Drupal\jsonapi\EventSubscriber\FieldStorageDefinitionEventSubscriber + arguments: ['@cache_tags.invalidator', '@router.builder'] + tags: + - { name: event_subscriber } # Deprecated services. serializer.normalizer.htt_exception.jsonapi: diff --git a/src/EventSubscriber/FieldStorageDefinitionEventSubscriber.php b/src/EventSubscriber/FieldStorageDefinitionEventSubscriber.php new file mode 100644 index 0000000..8483181 --- /dev/null +++ b/src/EventSubscriber/FieldStorageDefinitionEventSubscriber.php @@ -0,0 +1,63 @@ +cacheTagsInvalidator = $cache_tags_invalidator; + $this->routeBuilder = $route_builder; + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + return static::getFieldStorageDefinitionEvents(); + } + + /** + * {@inheritdoc} + */ + public function onFieldStorageDefinitionEvent(FieldStorageDefinitionEvent $event) { + // @todo: only do this when relationship fields are updated, not just any field. + $this->cacheTagsInvalidator->invalidateTags(['jsonapi_resource_types']); + $this->routeBuilder->setRebuildNeeded(); + } + +}