我有一个节点对象,我试图用它来获取Drupal 8中的给定路径。
drupal_lookup_path()
Drupal 7中有这个功能,但是我没有看到任何与Drupal 8相当的产品或文档。
从节点对象获取路径的新“ Drupal”方法是什么?
会是简单的东西$node->get('path')
吗?
这似乎是一个简单的问题,但是我绝对找不到关于它的任何文档。
注意,我不需要当前路径的路径别名。我想要给定节点对象或节点ID的任意节点的路径别名。
我有一个节点对象,我试图用它来获取Drupal 8中的给定路径。
drupal_lookup_path()
Drupal 7中有这个功能,但是我没有看到任何与Drupal 8相当的产品或文档。
从节点对象获取路径的新“ Drupal”方法是什么?
会是简单的东西$node->get('path')
吗?
这似乎是一个简单的问题,但是我绝对找不到关于它的任何文档。
注意,我不需要当前路径的路径别名。我想要给定节点对象或节点ID的任意节点的路径别名。
Answers:
要获取节点ID的路径,请使用AliasManager :: getAliasByPath:
$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
如果您只有nid,那么4k4的解决方案
$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
效果很好。但是,如果您已经有一个节点对象,则可以跳过一两个步骤。节点实际上已经内置了获取URL的方法。
$node->toUrl()->toString();
将返回节点的别名URL。
toUrl()返回url对象。在这里查看https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x
toString()是url对象的方法,该方法返回url的字符串表示形式。
$node->toUrl()->setAbsolute()->toString()
将返回绝对URL,可用于共享等
从节点对象获取节点URL的最佳方法-
它还将处理节点语言。
如果要按语言获取节点别名URL,请不要忘记使用这种语言。
$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);
如果在类中使用它,请不要忘记正确使用依赖项注入。
我一直希望有一个更“ Drupalesque”的解决方案,但这是我自己做的工作:
function getPathFromNID($nid) {
$db = \Drupal::database();
$data = $db
->select('url_alias', 'u')
->fields('u', ['alias'])
->condition('source', '/node/' . $nid)
->execute()
->fetchField();
return $data;
}