function ParamConverterManager::setRouteParameterConverters

Same name and namespace in other branches
  1. 11.x core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php \Drupal\Core\ParamConverter\ParamConverterManager::setRouteParameterConverters()
  2. 10 core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php \Drupal\Core\ParamConverter\ParamConverterManager::setRouteParameterConverters()
  3. 9 core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php \Drupal\Core\ParamConverter\ParamConverterManager::setRouteParameterConverters()
  4. 8.9.x core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php \Drupal\Core\ParamConverter\ParamConverterManager::setRouteParameterConverters()

Saves a list of applicable converters to each route.

Parameters

\Symfony\Component\Routing\RouteCollection $routes: A collection of routes to apply converters to.

Overrides ParamConverterManagerInterface::setRouteParameterConverters

File

core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php, line 43

Class

ParamConverterManager
Manages converter services for converting request parameters to full objects.

Namespace

Drupal\Core\ParamConverter

Code

public function setRouteParameterConverters(RouteCollection $routes) {
  foreach ($routes->all() as $route) {
    if (!$parameters = $route->getOption('parameters')) {
      // Continue with the next route if no parameters have been defined.
      continue;
    }
    // Loop over all defined parameters and look up the right converter.
    foreach ($parameters as $name => &$definition) {
      // Skip parameters that already have a manually set converter.
      if (!isset($definition['converter'])) {
        foreach ($this->converters
          ->getIterator() as $converter => $service) {
          if ($service->applies($definition, $name, $route)) {
            $definition['converter'] = $converter;
            break;

          }
        }
      }
      if (isset($definition['converter']) && !$route->hasRequirement($name)) {
        $service = $this->getConverter($definition['converter']);
        // If the converter can provide a regex requirement and the route
        // doesn't already have one for this parameter, set it.
        if ($service instanceof ParamConverterRouteRequirementInterface && $requirement = $service->getRouteRequirement($definition, $name)) {
          $route->setRequirement($name, $requirement);
        }
      }
    }
    // Override the parameters array.
    $route->setOption('parameters', $parameters);
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.