You are here

public function EntityDeriver::getDerivativeDefinitions in Drupal 10

Same name in this branch
  1. 10 core/modules/rest/src/Plugin/Deriver/EntityDeriver.php \Drupal\rest\Plugin\Deriver\EntityDeriver::getDerivativeDefinitions()
  2. 10 core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php \Drupal\Core\Entity\Plugin\DataType\Deriver\EntityDeriver::getDerivativeDefinitions()
Same name and namespace in other branches
  1. 8 core/modules/rest/src/Plugin/Deriver/EntityDeriver.php \Drupal\rest\Plugin\Deriver\EntityDeriver::getDerivativeDefinitions()
  2. 9 core/modules/rest/src/Plugin/Deriver/EntityDeriver.php \Drupal\rest\Plugin\Deriver\EntityDeriver::getDerivativeDefinitions()

File

core/modules/rest/src/Plugin/Deriver/EntityDeriver.php, line 64

Class

EntityDeriver
Provides a resource plugin definition for every entity type.

Namespace

Drupal\rest\Plugin\Deriver

Code

public function getDerivativeDefinitions($base_plugin_definition) {
  if (!isset($this->derivatives)) {

    // Add in the default plugin configuration and the resource type.
    foreach ($this->entityTypeManager
      ->getDefinitions() as $entity_type_id => $entity_type) {
      if ($entity_type
        ->isInternal()) {
        continue;
      }
      $this->derivatives[$entity_type_id] = [
        'id' => 'entity:' . $entity_type_id,
        'entity_type' => $entity_type_id,
        'serialization_class' => $entity_type
          ->getClass(),
        'label' => $entity_type
          ->getLabel(),
      ];
      $default_uris = [
        'canonical' => "/entity/{$entity_type_id}/" . '{' . $entity_type_id . '}',
        'create' => "/entity/{$entity_type_id}",
      ];
      foreach ($default_uris as $link_relation => $default_uri) {

        // Check if there are link templates defined for the entity type and
        // use the path from the route instead of the default.
        if ($link_template = $entity_type
          ->getLinkTemplate($link_relation)) {
          $this->derivatives[$entity_type_id]['uri_paths'][$link_relation] = $link_template;
        }
        else {
          $this->derivatives[$entity_type_id]['uri_paths'][$link_relation] = $default_uri;
        }
      }
      $this->derivatives[$entity_type_id] += $base_plugin_definition;
    }
  }
  return $this->derivatives;
}