You are here

public function MenuTreeStorage::loadTreeData in Drupal 10

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

File

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

Class

MenuTreeStorage
Provides a menu tree storage using the database.

Namespace

Drupal\Core\Menu

Code

public function loadTreeData($menu_name, MenuTreeParameters $parameters) {
  $tree_cid = "tree-data:{$menu_name}:" . serialize($parameters);
  $cache = $this->menuCacheBackend
    ->get($tree_cid);
  if ($cache && isset($cache->data)) {
    $data = $cache->data;

    // Cache the definitions in memory so they don't need to be loaded again.
    $this->definitions += $data['definitions'];
    unset($data['definitions']);
  }
  else {
    $links = $this
      ->loadLinks($menu_name, $parameters);
    $data['tree'] = $this
      ->doBuildTreeData($links, $parameters->activeTrail, $parameters->minDepth);
    $data['definitions'] = [];
    $data['route_names'] = $this
      ->collectRoutesAndDefinitions($data['tree'], $data['definitions']);
    $this->menuCacheBackend
      ->set($tree_cid, $data, Cache::PERMANENT, [
      'config:system.menu.' . $menu_name,
    ]);

    // The definitions were already added to $this->definitions in
    // $this->doBuildTreeData()
    unset($data['definitions']);
  }
  return $data;
}