drupal - Getting a menu delivered via REST -


i trying menu via rest , i've created new module , rest resource plugin allows on /entity/restmenu/{menu_name}.

i can return example json using function when hit url.

public function get(entityinterface $entity) {   $result = array();   ($i = 0; $i < 10; $i++) {     $temp = array(       'title' => 'test ' . $i,       'href' => '#/' . $i     );     array_push($result, $temp);   }   return new resourceresponse(json_encode($result)); } 

i cannot figure out how load menu based on $entity. if hit url (http://dang.dev:8888/entity/restmenu/main?_format=hal_json) $entity's value 'main' machine name of main menu.

i've tried using drupal menu tree, not having luck, , debugging thing json responses quite difficult.

how menu item titles , paths based on menu machine name?

edit

ok, sort of figured out.

public function get($entity) {   $menu_name = $entity;   $menu_parameters = \drupal::menutree()->getcurrentroutemenutreeparameters($menu_name);   $tree = \drupal::menutree()->load($menu_name, $menu_parameters);   $renderable = \drupal::menutree()->build($tree);   $result = array();    foreach (end($renderable) $key => $val) {     $temp = array(       'menu_item' => $val,       'route' => $key     );     array_push($result, $temp);   }   return new resourceresponse(json_encode($result)); } 

right output:

[   {     "menu_item":{       "is_expanded":false,       "is_collapsed":false,       "in_active_trail":false,       "attributes":"",       "title":"home",       "url":{        },       "below":[        ],       "original_link":{        }     },     "route":"standard.front_page"   },   {     "menu_item":{       "is_expanded":false,       "is_collapsed":false,       "in_active_trail":false,       "attributes":"",       "title":"communities",       "url":{        },       "below":[        ],       "original_link":{        }     },     "route":"menu_link_content:139d0413-dc50-4772-8200-bc6c92571fa7"   } ] 

any idea why url or original_link empty?

this correct answer:

public function get($entity) {   $menu_name = $entity;   $menu_parameters = \drupal::menutree()->getcurrentroutemenutreeparameters($menu_name);   $tree = \drupal::menutree()->load($menu_name, $menu_parameters);   $result = array();    foreach ($tree $element) {     $link = $element->link;     array_push($result, array(         'title' => $link->gettitle(),         'url' => $link->geturlobject()->getinternalpath(),         'weight' => $link->getweight()       )     );   }   return new resourceresponse(json_encode($result)); } 

Comments

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -