获取当前节点的父菜单项

Get parent menu item of a current node

我正在尝试获取我当前所在节点的父菜单项:

$node_id = // some id
$menu_link_manager = \Drupal::service('plugin.manager.menu.link');
$menu_link = $menu_link_manager->loadLinksByRoute('entity.node.canonical', array('node' => $node_id));
$parent = $menu_link->getParent();

但由于某种原因,它总是失败并出现以下错误:

Error: Call to a member function getParent() on array

当我检查 $menu_link 时,我可以清楚地看到它在那里:

另外getParent()的方法似乎是正确的:Docs

非常感谢任何帮助!

loadLinksByRoute returns \Drupal\Core\Menu\MenuLinkInterface 的数组。所以当你打电话时:

$menu_link_manager->loadLinksByRoute()

你得到的是一个数组而不是一个对象(Drupal 经常 returns 在你可能期望对象的地方返回数组)。您的路线可以在多个菜单 link 上,因此您可能需要考虑从该数组中提取什么,但最简单的解决方案是使用 reset() or array_pop().[= 提取数组中的第一个元素14=]