protected ResourceRoutes::getRoutesForResourceConfig(RestResourceConfigInterface $rest_resource_config)
Provides all routes for a given REST resource config.
This method determines where a resource is reachable, what path replacements are used, the required HTTP method for the operation etc.
Parameters
\Drupal\rest\RestResourceConfigInterface $rest_resource_config: The rest resource config.
Return value
\Symfony\Component\Routing\RouteCollection The route collection.
File
- core/modules/rest/src/Routing/ResourceRoutes.php, line 84
Class
- ResourceRoutes
- Subscriber for REST-style routes.
Namespace
Drupal\rest\Routing
Code
protected function getRoutesForResourceConfig(RestResourceConfigInterface $rest_resource_config) {
$plugin = $rest_resource_config->getResourcePlugin();
$collection = new RouteCollection();
foreach ($plugin->routes() as $name => $route) {
/** @var \Symfony\Component\Routing\Route $route */
// @todo: Are multiple methods possible here?
$methods = $route->getMethods();
// Only expose routes where the method is enabled in the configuration.
if ($methods && ($method = $methods[0]) && $supported_formats = $rest_resource_config->getFormats($method)) {
$route->setRequirement('_csrf_request_header_token', 'TRUE');
// Check that authentication providers are defined.
if (empty($rest_resource_config->getAuthenticationProviders($method))) {
$this->logger->error('At least one authentication provider must be defined for resource @id', array(':id' => $rest_resource_config->id()));
continue;
}
// Check that formats are defined.
if (empty($rest_resource_config->getFormats($method))) {
$this->logger->error('At least one format must be defined for resource @id', array(':id' => $rest_resource_config->id()));
continue;
}
// If the route has a format requirement, then verify that the
// resource has it.
$format_requirement = $route->getRequirement('_format');
if ($format_requirement && !in_array($format_requirement, $rest_resource_config->getFormats($method))) {
continue;
}
// The configuration seems legit at this point, so we set the
// authentication provider and add the route.
$route->setOption('_auth', $rest_resource_config->getAuthenticationProviders($method));
$route->setDefault('_rest_resource_config', $rest_resource_config->id());
$collection->add("rest.$name", $route);
}
}
return $collection;
}
Please login to continue.