我正在检查Drupal 8并尝试根据文章的节点ID生成链接.在Drupal 7中它是这样的:
$options = array('absolute' => TRUE); $nid = 1; // Node ID $url = url('node/' . $nid, $options);
这导致与正确的url-alias的绝对链接.
所以url() - 函数似乎已被弃用; 什么是Drupal-8方式?对我来说看起来像一个非常基本的功能,但我找不到任何有用的参考.
您需要使用\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核心之外).
创建绝对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