You are here

public function EntityResourcePostRouteSubscriber::onDynamicRouteEvent in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/rest/src/EventSubscriber/EntityResourcePostRouteSubscriber.php \Drupal\rest\EventSubscriber\EntityResourcePostRouteSubscriber::onDynamicRouteEvent()
  2. 10 core/modules/rest/src/EventSubscriber/EntityResourcePostRouteSubscriber.php \Drupal\rest\EventSubscriber\EntityResourcePostRouteSubscriber::onDynamicRouteEvent()

Provides routes on route rebuild time.

Parameters

\Drupal\Core\Routing\RouteBuildEvent $event: The route build event.

File

core/modules/rest/src/EventSubscriber/EntityResourcePostRouteSubscriber.php, line 38

Class

EntityResourcePostRouteSubscriber
Generates a 'create' route for an entity type if it has a REST POST route.

Namespace

Drupal\rest\EventSubscriber

Code

public function onDynamicRouteEvent(RouteBuildEvent $event) {
  $route_collection = $event
    ->getRouteCollection();
  $resource_configs = $this->resourceConfigStorage
    ->loadMultiple();

  // Iterate over all REST resource config entities.
  foreach ($resource_configs as $resource_config) {

    // We only care about REST resource config entities for the
    // \Drupal\rest\Plugin\rest\resource\EntityResource plugin.
    $plugin_id = $resource_config
      ->toArray()['plugin_id'];
    if (substr($plugin_id, 0, 6) !== 'entity') {
      continue;
    }
    $entity_type_id = substr($plugin_id, 7);
    $rest_post_route_name = "rest.entity.{$entity_type_id}.POST";
    if ($rest_post_route = $route_collection
      ->get($rest_post_route_name)) {

      // Create a route for the 'create' link relation type for this entity
      // type that uses the same route definition as the REST 'POST' route
      // which use that entity type.
      // @see \Drupal\Core\Entity\Entity::toUrl()
      $entity_create_route_name = "entity.{$entity_type_id}.create";
      $route_collection
        ->add($entity_create_route_name, $rest_post_route);
    }
  }
}