You are here

public function MenuTreeStorage::loadByRoute in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Menu/MenuTreeStorage.php \Drupal\Core\Menu\MenuTreeStorage::loadByRoute()

Loads multiple plugin definitions from the storage based on route.

Parameters

string $route_name: The route name.

array $route_parameters: (optional) The route parameters. Defaults to an empty array.

string $menu_name: (optional) Restricts the found links to just those in the named menu.

Return value

array An array of menu link definitions keyed by ID and ordered by depth.

Overrides MenuTreeStorageInterface::loadByRoute

File

core/lib/Drupal/Core/Menu/MenuTreeStorage.php, line 680

Class

MenuTreeStorage
Provides a menu tree storage using the database.

Namespace

Drupal\Core\Menu

Code

public function loadByRoute($route_name, array $route_parameters = [], $menu_name = NULL) {

  // Sort the route parameters so that the query string will be the same.
  asort($route_parameters);

  // Since this will be urlencoded, it's safe to store and match against a
  // text field.
  // @todo Standardize an efficient way to load by route name and parameters
  //   in place of system path. https://www.drupal.org/node/2302139
  $param_key = $route_parameters ? UrlHelper::buildQuery($route_parameters) : '';
  $query = $this->connection
    ->select($this->table, NULL, $this->options);
  $query
    ->fields($this->table, $this
    ->definitionFields());
  $query
    ->condition('route_name', $route_name);
  $query
    ->condition('route_param_key', $param_key);
  if ($menu_name) {
    $query
      ->condition('menu_name', $menu_name);
  }

  // Make the ordering deterministic.
  $query
    ->orderBy('depth');
  $query
    ->orderBy('weight');
  $query
    ->orderBy('id');
  $loaded = $this
    ->safeExecuteSelect($query)
    ->fetchAllAssoc('id', \PDO::FETCH_ASSOC);
  foreach ($loaded as $id => $link) {
    $loaded[$id] = $this
      ->prepareLink($link);
  }
  return $loaded;
}