function Routes::getRoutesForResourceType
Same name in other branches
- 9 core/modules/jsonapi/src/Routing/Routes.php \Drupal\jsonapi\Routing\Routes::getRoutesForResourceType()
- 8.9.x core/modules/jsonapi/src/Routing/Routes.php \Drupal\jsonapi\Routing\Routes::getRoutesForResourceType()
- 11.x core/modules/jsonapi/src/Routing/Routes.php \Drupal\jsonapi\Routing\Routes::getRoutesForResourceType()
Gets applicable resource routes for a JSON:API resource type.
Parameters
\Drupal\jsonapi\ResourceType\ResourceType $resource_type: The JSON:API resource type for which to get the routes.
string $path_prefix: The root path prefix.
Return value
\Symfony\Component\Routing\RouteCollection A collection of routes for the given resource type.
1 call to Routes::getRoutesForResourceType()
- Routes::routes in core/
modules/ jsonapi/ src/ Routing/ Routes.php
File
-
core/
modules/ jsonapi/ src/ Routing/ Routes.php, line 151
Class
- Routes
- Defines dynamic routes.
Namespace
Drupal\jsonapi\RoutingCode
protected static function getRoutesForResourceType(ResourceType $resource_type, $path_prefix) {
// Internal resources have no routes.
if ($resource_type->isInternal()) {
return new RouteCollection();
}
$routes = new RouteCollection();
// Collection route like `/jsonapi/node/article`.
if ($resource_type->isLocatable()) {
$collection_route = new Route("/{$resource_type->getPath()}");
$collection_route->addDefaults([
RouteObjectInterface::CONTROLLER_NAME => static::CONTROLLER_SERVICE_NAME . ':getCollection',
]);
$collection_route->setMethods([
'GET',
]);
// Allow anybody access because "view" and "view label" access are checked
// in the controller.
$collection_route->setRequirement('_access', 'TRUE');
$routes->add(static::getRouteName($resource_type, 'collection'), $collection_route);
}
// Creation route.
if ($resource_type->isMutable()) {
$collection_create_route = new Route("/{$resource_type->getPath()}");
$collection_create_route->addDefaults([
RouteObjectInterface::CONTROLLER_NAME => static::CONTROLLER_SERVICE_NAME . ':createIndividual',
]);
$collection_create_route->setMethods([
'POST',
]);
$create_requirement = sprintf("%s:%s", $resource_type->getEntityTypeId(), $resource_type->getBundle());
$collection_create_route->setRequirement('_entity_create_access', $create_requirement);
$collection_create_route->setRequirement('_csrf_request_header_token', 'TRUE');
$routes->add(static::getRouteName($resource_type, 'collection.post'), $collection_create_route);
}
// Individual routes like `/jsonapi/node/article/{uuid}` or
// `/jsonapi/node/article/{uuid}/relationships/uid`.
$routes->addCollection(static::getIndividualRoutesForResourceType($resource_type));
// Add the resource type as a parameter to every resource route.
foreach ($routes as $route) {
static::addRouteParameter($route, static::RESOURCE_TYPE_KEY, [
'type' => ResourceTypeConverter::PARAM_TYPE_ID,
]);
$route->addDefaults([
static::RESOURCE_TYPE_KEY => $resource_type->getTypeName(),
]);
}
// Resource routes all have the same base path.
$routes->addPrefix($path_prefix);
return $routes;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.