You are here

protected function ResourceTypeRepository::getRelatableResourceTypesFromFieldDefinition in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php \Drupal\jsonapi\ResourceType\ResourceTypeRepository::getRelatableResourceTypesFromFieldDefinition()

Get relatable resource types from a field definition.

Parameters

\Drupal\Core\Field\FieldDefinitionInterface $field_definition: The field definition from which to calculate relatable JSON:API resource types.

\Drupal\jsonapi\ResourceType\ResourceType[] $resource_types: A list of JSON:API resource types.

Return value

\Drupal\jsonapi\ResourceType\ResourceType[] The JSON:API resource types with which the given field may have a relationship.

1 call to ResourceTypeRepository::getRelatableResourceTypesFromFieldDefinition()
ResourceTypeRepository::calculateRelatableResourceTypes in core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php
Calculates relatable JSON:API resource types for a given resource type.

File

core/modules/jsonapi/src/ResourceType/ResourceTypeRepository.php, line 441

Class

ResourceTypeRepository
Provides a repository of all JSON:API resource types.

Namespace

Drupal\jsonapi\ResourceType

Code

protected function getRelatableResourceTypesFromFieldDefinition(FieldDefinitionInterface $field_definition, array $resource_types) {
  $item_definition = $field_definition
    ->getItemDefinition();
  $entity_type_id = $item_definition
    ->getSetting('target_type');
  $handler_settings = $item_definition
    ->getSetting('handler_settings');
  $target_bundles = empty($handler_settings['target_bundles']) ? $this
    ->getAllBundlesForEntityType($entity_type_id) : $handler_settings['target_bundles'];
  $relatable_resource_types = [];
  foreach ($target_bundles as $target_bundle) {
    if ($resource_type = static::lookupResourceType($resource_types, $entity_type_id, $target_bundle)) {
      $relatable_resource_types[] = $resource_type;
    }
    elseif (!InstallerKernel::installationAttempted()) {
      trigger_error(sprintf('The "%s" at "%s:%s" references the "%s:%s" entity type that does not exist. Please take action.', $field_definition
        ->getName(), $field_definition
        ->getTargetEntityTypeId(), $field_definition
        ->getTargetBundle(), $entity_type_id, $target_bundle), E_USER_WARNING);
    }
  }
  return $relatable_resource_types;
}