You are here

public function ServicesMenuResource::get in Services Menu 2.x

Same name and namespace in other branches
  1. 8 src/Plugin/rest/resource/ServicesMenuResource.php \Drupal\services_menu\Plugin\rest\resource\ServicesMenuResource::get()

Create the menu response.

Parameters

string $menu_name: The name of menu to load.

Return value

\Drupal\rest\ResourceResponse The menu response object.

File

src/Plugin/rest/resource/ServicesMenuResource.php, line 88

Class

ServicesMenuResource
Provides a service resource for menus.

Namespace

Drupal\services_menu\Plugin\rest\resource

Code

public function get($menu_name = NULL) {
  $menu_tree = $this->menuTree;
  $generator = $this->urlGenerator;
  $menu = [];

  // Load the tree based on this set of parameters.
  $tree = $menu_tree
    ->load($menu_name, new MenuTreeParameters());

  // Transform the tree using the manipulators you want.
  $manipulators = [
    // Only show links that are accessible for the current user.
    [
      'callable' => 'menu.default_tree_manipulators:checkAccess',
    ],
    // Use the default sorting of menu links.
    [
      'callable' => 'menu.default_tree_manipulators:generateIndexAndSort',
    ],
  ];
  $tree = $menu_tree
    ->transform($tree, $manipulators);
  foreach ($tree as $element) {

    /** @var \Drupal\Core\Menu\MenuLinkInterface $link */
    $link = $element->link;
    $path = $generator
      ->getPathFromRoute($link
      ->getRouteName());
    $menu[$link
      ->getRouteName()]['title'] = $link
      ->getTitle();
    $menu[$link
      ->getRouteName()]['url'] = $path;
    if ($element->subtree) {
      $subtree = $menu_tree
        ->build($element->subtree);
      foreach ($subtree['#items'] as $key => $value) {
        $path = $generator
          ->getPathFromRoute($key);
        $menu[$key]['title'] = $value['title'];
        $menu[$key]['url'] = $path;

        // For getting submenu list.
        foreach ($subtree['#items'][$key]['below'] as $subkey => $subvalue) {
          $path = $generator
            ->getPathFromRoute($subkey);
          $menu[$key]['below'][$subkey]['title'] = $subvalue['title'];
          $menu[$key]['below'][$subkey]['url'] = $path;
        }
      }
    }
  }
  $response = new ResourceResponse($menu);
  $response
    ->addCacheableDependency($menu);
  return $response;
}