当前位置:  开发笔记 > 运维 > 正文

从Drupal 8中的节点ID创建链接

如何解决《从Drupal8中的节点ID创建链接》经验,为你挑选了2个好方法。

我正在检查Drupal 8并尝试根据文章的节点ID生成链接.在Drupal 7中它是这样的:

$options = array('absolute' => TRUE);
$nid = 1; // Node ID
$url = url('node/' . $nid, $options);

这导致与正确的url-alias的绝对链接.

所以url() - 函数似乎已被弃用; 什么是Drupal-8方式?对我来说看起来像一个非常基本的功能,但我找不到任何有用的参考.



1> Pierre Buyle..:

您需要使用\Drupal\Core\Url该类,特别是其fromRoute静态方法.Drupal 8使用名称与其实际URL路径不同的路由.在您的情况下,使用的路由是节点实体的规范路由:entity.node.canonical.\Drupal\Core\Url::fromRoute()不会返回字符串,而是返回一个对象.要将URL作为字符串获取,您需要调用其toString()方法.

$options = ['absolute' => TRUE];
$url = \Drupal\Core\Url::fromRoute('entity.node.canonical', ['node' => 1], $options);
$url = $url->toString();

静态方法不易测试,$url->toString()需要初始化容器.你可以用一个调用替换静态方法UrlGeneratorInterface::generateFromRoute()上的url_generator服务.

$options = ['absolute' => TRUE];
$url = $this->url_generator->generateFromRoute('entity.node.canonical', ['node' => 1], $options);
$url = $url->toString();

不幸的是,这个方法被标记为@internal因此你不应该在用户代码中使用它(即在Drupal核心之外).



2> leymannx..:

创建绝对URL:

$options = ['absolute' => TRUE];
$url_object = Drupal\Core\Url::fromRoute('entity.node.canonical', ['node' => $nid], $options);
// will output http://example.com/path-to-my-node

创建绝对链接对象:

$options = ['absolute' => TRUE, 'attributes' => ['class' => 'this-class']];
$node_title = Drupal\Core\Render\Markup::create('' . $node_title . '');
$link_object = Drupal\Core\Link::createFromRoute($node_title, 'entity.node.canonical', ['node' => $nid], $options);
// will output My Node's Title

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有