public function ServicesMenuResource::get in Services Menu 2.x
Same name and namespace in other branches
- 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\resourceCode
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;
}