You are here

public static function MenuLinkConfig::processEntityRouteParameters in Config menu link 8

Processes entity route parameters for a given menu link.

Parameters

\Drupal\menu_link_config\MenuLinkConfigInterface|\Drupal\Core\Menu\MenuLinkInterface $menu_link: The menu link to process. This is being passed in to support static::postLoad()

callable $processor: An entity route parameter processor that gets the entity type ID and the current route parameter value as arguments and can return the processed route parameter value or NULL if it does not want to alter the value.

File

src/Entity/MenuLinkConfig.php, line 193
Contains \Drupal\menu_link_config\Entity\MenuLinkConfig.

Class

MenuLinkConfig
Defines the menu link config entity.

Namespace

Drupal\menu_link_config\Entity

Code

public static function processEntityRouteParameters($menu_link, $processor) {

  /** @var \Symfony\Component\Routing\Route $route */
  $route = \Drupal::service('router.route_provider')
    ->getRouteByName($menu_link
    ->getRouteName());
  $route_parameters = $menu_link
    ->getRouteParameters();
  $changed = FALSE;
  foreach ($route_parameters as $name => $value) {
    $parameter_info = $route
      ->getOption('parameters');

    // Ignore route parameters that are not entity IDs.
    if (isset($parameter_info[$name]['type']) && strpos($parameter_info[$name]['type'], 'entity:') === 0) {
      $entity_type_id = substr($parameter_info[$name]['type'], 7);
      $new_value = $processor($entity_type_id, $value);
      if (isset($new_value)) {
        $route_parameters[$name] = $new_value;
        $changed = TRUE;
      }
    }
  }
  if ($changed) {
    $menu_link
      ->set('route_parameters', $route_parameters);
  }
}