Chris@0: resourceConfigStorage = $entity_type_manager->getStorage('rest_resource_config'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Provides routes on route rebuild time. Chris@0: * Chris@0: * @param \Drupal\Core\Routing\RouteBuildEvent $event Chris@0: * The route build event. Chris@0: */ Chris@0: public function onDynamicRouteEvent(RouteBuildEvent $event) { Chris@0: $route_collection = $event->getRouteCollection(); Chris@0: Chris@0: $resource_configs = $this->resourceConfigStorage->loadMultiple(); Chris@0: // Iterate over all REST resource config entities. Chris@0: foreach ($resource_configs as $resource_config) { Chris@0: // We only care about REST resource config entities for the Chris@0: // \Drupal\rest\Plugin\rest\resource\EntityResource plugin. Chris@0: $plugin_id = $resource_config->toArray()['plugin_id']; Chris@0: if (substr($plugin_id, 0, 6) !== 'entity') { Chris@0: continue; Chris@0: } Chris@0: Chris@0: $entity_type_id = substr($plugin_id, 7); Chris@0: $rest_post_route_name = "rest.entity.$entity_type_id.POST"; Chris@0: if ($rest_post_route = $route_collection->get($rest_post_route_name)) { Chris@0: // Create a route for the 'create' link relation type for this entity Chris@0: // type that uses the same route definition as the REST 'POST' route Chris@0: // which use that entity type. Chris@0: // @see \Drupal\Core\Entity\Entity::toUrl() Chris@0: $entity_create_route_name = "entity.$entity_type_id.create"; Chris@0: $route_collection->add($entity_create_route_name, $rest_post_route); Chris@0: } Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public static function getSubscribedEvents() { Chris@0: // Priority -10, to run after \Drupal\rest\Routing\ResourceRoutes, which has Chris@0: // priority 0. Chris@0: $events[RoutingEvents::DYNAMIC][] = ['onDynamicRouteEvent', -10]; Chris@0: return $events; Chris@0: } Chris@0: Chris@0: }